Java 在回收器视图中从firebase检索特定密钥
我存储了一个键的字符串数组,我有一个recycler视图,我在其中显示数据,我想在recycler视图中只显示该数组的键。 game.class有getter和setter,我教过如何添加值事件侦听器,迭代,如果数组中有快照的键,我会添加它,但我不知道放在哪里; 谢谢Java 在回收器视图中从firebase检索特定密钥,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我存储了一个键的字符串数组,我有一个recycler视图,我在其中显示数据,我想在recycler视图中只显示该数组的键。 game.class有getter和setter,我教过如何添加值事件侦听器,迭代,如果数组中有快照的键,我会添加它,但我不知道放在哪里; 谢谢 @覆盖 创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ 视图根视图=充气机。充气(R.layout.fragment\u favoritas,container,fals
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u favoritas,container,false);
recyclerView=(recyclerView)rootView.findViewById(R.id.recycler);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
prefs=this.getActivity().getSharedReferences(“pref”,Context.MODE\u PRIVATE);
mdatabase=FirebaseDatabase.getInstance().getReference().child(“Partidas”);
返回rootView;
}
@凌驾
public void onStart(){
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(
游戏类,
R.layout.row,
GameViewHolder.class,
mdatabase
) {
@凌驾
受保护的void populateViewHolder(游戏视图holder、游戏模型、最终int位置){
viewHolder.setTitle(model.getGame_name());
setJugado(model.getJugado());
viewHolder.setCreator(model.getCreator\u name())
});
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
公共静态类GameViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共游戏视图持有者(查看项目视图){
超级(项目视图);
mview=项目视图;
}
公共无效集合标题(字符串标题){
TextView title_txt=(TextView)mview.findviewbyd(R.id.gametitle);
title_txt.setText(title);
}
public void setCreator(字符串名称){
TextView name_txt=(TextView)mview.findviewbyd(R.id.gamecreator);
name_txt.setText(名称);
}
公共无效setJugado(int jugado){
TextView jugado_txt=(TextView)mview.findViewById(R.id.gametimes);
jugado_txt.setText(String.valueOf(jugado));
}
}
}用于检索数据如果您有密钥,则可以在每个引用上使用addListenerForSingleValueEvent并相应地更新数据
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());
}
});
我已经有钥匙了,我的问题是如何只显示那些钥匙哦!!我以为你在说从FirebaseRecyclerAdapter检索钥匙。等等,我会用keys@TincoDeSimone我已经更新了答案,请检查。我应该把它放在“填充视图持有者”方法上?是的,虽然它可能有点昂贵,但如果您想更新特定recyclerview中的数据,这是一个可行的解决方案
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());
}
});
@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())
});
}
};