我设法通过重构我的代码解决了我自己的问题。
1.在适配器类中,我为itemClickListener创建了一个接口
public interface RecyclerViewItemClick {
public void OnItemClickListener(UsersViewHolders holder, int position);
}
并创建一个全局
private RecyclerViewItemClick mListener;
将其添加到构造函数
public MessageListAdapter(RecyclerViewItemClick listener) {
this.mListener = listener;
}
2。在 onBindViewHolder() 我传递了持有者和位置
@Override
public void onBindViewHolder(@NonNull final UsersViewHolders holder, final int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.OnItemClickListener(holder, position);
}
});
}
3.在您的活动中,添加此代码。为 ArrayList 声明一个全局变量来存储键并将 addListenerForSingleValueEvent 调用到您的 DatabaseReference
//mUserDatabase is a DatabaseReference
mUserDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
String uid = datas.getKey();
//mUserKey is an ArrayList<String>
mUserKey.add(uid);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
4.现在添加它以获取每个位置的密钥
mAdapter = new MyAdapter(new MyAdapter.RecyclerViewItemClick() {
@Override
public void OnItemClickListener(PickMemberAdapter.UsersViewHolders holder, int position) {
String userKey = mUserKey.get(position);
if (!holder.mCheckBox.isChecked()) {
holder.mCheckBox.setChecked(true);
Toast.makeText(MainActivity.this, userKey, Toast.LENGTH_LONG).show();
} else {
holder.mCheckBox.setChecked(false);
Toast.makeText(MainActivity.this, userKey, Toast.LENGTH_LONG).show();
}
}
});