2 回答
TA贡献1866条经验 获得超5个赞
如果您尝试在position方法中确定项目的 Firebase 数据库 ID onBindViewHolder,则必须自己维护该映射。您可以通过从快照中提取getKey()和并保留它们的列表来轻松地做到这一点。getValue()onDataChange
是这样的:
mProductKeys = new ArrayList<String>();
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapShot : dataSnapshot.getChildren())
{
Product product = postSnapShot.getValue(Product.class);
mProducts.add(product);
mProductKeys.add(postSnapShot.getKey());
}
mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);
mRecyclerView.setAdapter(mAdapter);
mProgressBar.setVisibility(View.INVISIBLE);
}
然后在 中,onBindViewHolder您可以查找在 中单击的项目的键mProductKeys。
TA贡献1895条经验 获得超7个赞
好的,我尝试了不同的方法,只需添加一行即可完成。:) 无需添加ArrayList<String>。
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapShot : dataSnapshot.getChildren())
{
Product product = postSnapShot.getValue(Product.class);
product.setpKey(postSnapShot.getKey());
mProducts.add(product);
}
mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);
mRecyclerView.setAdapter(mAdapter);
mProgressBar.setVisibility(View.INVISIBLE);
}
并添加String pKey到我的Product.classwith Setter and Getter。
添加回答
举报