Martin De Simone
Martin De Simone

Reputation: 2148

Retrieve certain key from firebase in recycler view

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

Answers (1)

AndroidBeginner
AndroidBeginner

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

Related Questions