1
I have a Recycleview that receives data from Firebase, each data creates a box in the layout with the information contained within each key there in Firebase. I want you to search for a certain data box in this list and show me on the screen. For example, in a multi-button layout, when the first button is clicked, I want you to open Recycleview and click for me a certain data box that is inside this list. I need to know if it is possible to do this with Recycleview, if negative, how this model could be implemented.
public class ShowImagesActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private DatabaseReference mDatabase;
private ProgressDialog progressDialog;
private List<Upload> uploads;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_images);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
progressDialog = new ProgressDialog(this);
uploads = new ArrayList<>();
progressDialog.setMessage("Aguardando...");
progressDialog.show();
mDatabase = FirebaseDatabase.getInstance().getReference(Constants.DATABASE_PATH_UPLOADS);
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
progressDialog.dismiss();
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
uploads.add(upload);
}
adapter = new MyAdapter(getApplicationContext(), uploads);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
}
}
upload class
public class Upload{
public String name;
public String descricao;
public String local;
public String url;
public Upload() {
}
public Upload(String name, String descricao,String local,String url) {
this.name = name;
this.descricao = descricao;
this.local = local;
this.url= url;
}
public String getName() {
return name;
}
public String getDescricao() {
return descricao;
}
public String getLocal() {
return local;
}
public String getUrl() {
return url;
}
}
showmap class:
public class ShowMap extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
LocationManager locationManager;
public RecyclerView recyclerView;
public List<Upload> uploads;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_activity);
FirebaseApp.initializeApp(this);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
public int findInUploadsArray(List<Upload> uploads, String name){
for(int i = 0; i < uploads.size(); i++){
// supondo que sua classe possui um atributo "nome" e você está procurando um nome específico
if(uploads.get(i).getName().equals(name)) return i;
}
return -1;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
uploads = new ArrayList<>();
recyclerView = new RecyclerView(getApplicationContext());
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("uploads").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.getChildren().iterator();
while (dataSnapshotsChat.hasNext()) {
DataSnapshot dataSnapshotChild = dataSnapshotsChat.next();
String latitudeL = dataSnapshotChild.child("latitude").getValue().toString();
String longitudeL = dataSnapshotChild.child("longitude").getValue().toString();
double latitude1 = Double.parseDouble((latitudeL));
double longitude1 = Double.parseDouble(longitudeL);
LatLng local = new LatLng(latitude1, longitude1);
final String title = dataSnapshotChild.child("name").getValue().toString();
mMap.addMarker(new MarkerOptions().position(local).title(title));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 10));
Log.v("log",""+local);
Log.v("log",""+title);
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
int position = findInUploadsArray(uploads,marker.getTitle());
Log.v("log",""+marker.getTitle());
recyclerView.scrollToPosition(position);
return true;
}
});
}}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
}
This solves your problem: https://stackoverflow.com/a/30429439/2570426
– viana
acklay, I need something automated, when clicking a button is automatically directed to the data that is somewhere in the list.
– FranciscoM
If you have already done something, it would be interesting to edit the question is to insert what there is done.
– viana
I put the code above.
– FranciscoM