我有这样一个节点

我在本例中搜索id节点01,02,.当我找到它时,我将它发送到另一个活动中,在该活动中,我搜索匹配的id号,如下所示

当Id匹配时,我将它们显示在回收器视图中,现在我希望得到我正在搜索的节点的父节点- 01 ,但是每当我调用自己的database.getKey时,它返回的是餐厅而不是01。
我的问题是如何获得父节点而不是源节点或(父节点的父节点)?非常感谢
这是我的代码:
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference restaurantList;
String restaurantId;
FirebaseRecyclerAdapter<RestaurantModel, RestaurantViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant_list);
//Firebase
database = FirebaseDatabase.getInstance();
restaurantList = database.getReference("Restaurant");
recyclerView = (RecyclerView) findViewById(R.id.recycler_restaurants);
layoutManager = new LinearLayoutManager(this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
if(getIntent() !=null)
restaurantId = getIntent().getStringExtra("RestaurantId");
if(!restaurantId.isEmpty() && restaurantId != null)
{
loadListRestaurant(restaurantId);
}
}
private void loadListRestaurant(final String restaurantId) {
adapter = new FirebaseRecyclerAdapter<RestaurantModel, RestaurantViewHolder>(
RestaurantModel.class,
R.layout.restaurant_menu_item,
RestaurantViewHolder.class,
restaurantList.orderByChild("RestaurantId").equalTo(restaurantId)
) {
@Override
protected void populateViewHolder(RestaurantViewHolder viewHolder, RestaurantModel model, int position) {
viewHolder.restaurantName.setText(model.getName());
Picasso.get().load(model.getImage())
.into(viewHolder.restaurantImage);
viewHolder.restaurantRate.setRating(Float.parseFloat(model.getRating()));
viewHolder.restaurantCategory.setText(model.getDescription());
try {
if (Integer.parseInt(model.getPrice()) == 0)
viewHolder.priceRate.setRating(2);
else
viewHolder.priceRate.setRating(Integer.parseInt(model.getPrice()));
}
catch (Exception e){}
final RestaurantModel local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent fragmentintent = new Intent(RestaurantList.this, main_intermediate.class);
fragmentintent.putExtra("RestaurantId", restaurantList.getKey());
Log.d(TAG, restaurantList.getKey() );
startActivity(fragmentintent);
}
});
}
};
recyclerView.setAdapter(adapter);
}}
发布于 2018-07-21 17:10:40
这是一场斗争,但我明白了,谢谢大家的努力。我使用我的项目单击监听器来获取视图中位置的引用,然后将我的适配器作为参考文件附加到这个位置,从那里我可以使用getKey。
类似这样的工作:)
final RestaurantModel local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent fragmentintent = new Intent(RestaurantList.this, main_intermediate.class);
fragmentintent.putExtra("RestaurantId", adapter.getRef(position).getKey());
startActivity(fragmentintent);发布于 2018-07-21 15:24:17
要获得密钥,需要在01-02内循环,以便在使用getKey()时能够检索它们,因此请尝试以下操作:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Restaurant");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String keys=datas.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});https://stackoverflow.com/questions/51457214
复制相似问题