Reputation: 2148
I have a string array of keys stored, and i have a recycler view where i am showing the data, i want to show in the recycler view only the keys of that array. The game.class has the getters and setters, i taught on adding Value event listener, iterate and if in the array is a key of the snapshot i add it, but i dont know where to place it; Thanks
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_favoritas, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
prefs= this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
mdatabase= FirebaseDatabase.getInstance().getReference().child("Partidas");
return rootView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Game,GameViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Game, GameViewHolder>(
Game.class,
R.layout.row,
GameViewHolder.class,
mdatabase
) {
@Override
protected void populateViewHolder(GameViewHolder viewHolder, Game model, final int position) {
viewHolder.setTitle(model.getGame_name());
viewHolder.setJugado(model.getJugado());
viewHolder.setCreator(model.getCreator_name())
});
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
public static class GameViewHolder extends RecyclerView.ViewHolder {
View mview;
public GameViewHolder(View itemView) {
super(itemView);
mview=itemView;
}
public void setTitle(String title){
TextView title_txt=(TextView)mview.findViewById(R.id.gametitle);
title_txt.setText(title);
}
public void setCreator(String name){
TextView name_txt=(TextView)mview.findViewById(R.id.gamecreator);
name_txt.setText(name);
}
public void setJugado(int jugado){
TextView jugado_txt=(TextView)mview.findViewById(R.id.gametimes);
jugado_txt.setText(String.valueOf(jugado));
}
}
}
Upvotes: 2
Views: 1725
Reputation: 683
For retrieving data if you have key then you can use addListenerForSingleValueEvent on each ref and update the data accordingly.
DatabaseReference ref = <YourRef>.child(<YourKeys>.get(position));
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError firebaseError) {
Log.e(TAG, "Unable to fetch data " + firebaseError.getMessage());
}
});
You can get the ref using getRef(position) and then get the key to the specific view using ref.getKey();
@Override
protected void populateViewHolder(GameViewHolder viewHolder, Game model, final int position) {
final DatabaseReference gameRef= getRef(position);
final String postKey = gameRef.getKey();
viewHolder.setTitle(model.getGame_name());
viewHolder.setJugado(model.getJugado());
viewHolder.setCreator(model.getCreator_name())
});
}
};
Upvotes: 2