当我在RecyclerView中点击一个项目时,我试图获得每个位置的唯一键。
当我打开 "详细活动 "时,计数应该增加一个。我如何才能做到这一点?
所有RecyclerView的数据都是从FirebaseDB加载的。这里是屏幕截图。
我们可以看到在News节点中,有一些Unique Keys。
当我点击Adapter中的某个位置时,如何在Toast中获取这些键。
这是我所尝试的。
databaseReference = FirebaseDatabase.getInstance().getReference("News");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
keyID = dataSnapshot.getKey();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
holder.view_counter.setText(homeModel.getViewCounts());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "Key is " + keyID, Toast.LENGTH_SHORT).show();
// Intent intent = new Intent(context, DetailNews.class);
// intent.putExtra("POS", holder.getAdapterPosition());
// context.startActivity(intent);
}
});
}
按照以下步骤操作。
在这个 "key "字段中填入MainActivity中recallerview-arraylist的监听器中的firebase键值。像这样。
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
newsArrayList.clear();
for(DataSnapshot data : dataSnapshot.getChildren()){
HomeModel news = data.getValue(HomeModel.class);
news.setKey(data.getKey());
newsArrayList.add(news);
}
customAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
要在firebase中把viewCount值加1, 在你的cardView -onClick方法中写一个事务:
String newsKey = newsArrayList.get(position).getKey();
ref = db.getReference("News").child(newsKey);
ref.runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
HomeModel selectedNews= mutableData.getValue(HomeModel.class);
int p = selectedNews.getViewCount();
p++;
selectedNews.setViewCount(p);
mutableData.setValue(selectedNews);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
}
});