可能有很多方法可以做到这一点,但这是我刚刚尝试过的一种。
The ChatMessageViewHolder
类有一个成员字段,用于保存每条聊天消息的根视图:
public static class ChatHolder extends RecyclerView.ViewHolder {
View mView;
public ChatHolder(View itemView) {
super(itemView);
mView = itemView;
}
我们可以用它mView
成员来访问可点击视图。你should添加吸气剂mView
,但我试图最小化这里的变化。
那么然后在populateView
我们可以使用具有附加功能的重载position
参数并用一个连接起来OnClickListener
像这样:
mRecycleViewAdapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(Chat.class, R.layout.message, ChatHolder.class, mChatRef) {
@Override
public void populateViewHolder(ChatHolder chatView, Chat chat, final int position) {
chatView.setName(chat.getName());
chatView.setText(chat.getText());
if (mAuthData != null && chat.getUid().equals(mAuthData.getUid())) {
chatView.setIsSender(true);
} else {
chatView.setIsSender(false);
}
chatView.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.w(TAG, "You clicked on "+position);
mRecycleViewAdapter.getRef(position).removeValue();
}
});
}
};
这个问题的答案提供了大量的灵感:单击回收器视图。只要能够确定用户点击的位置,就可以使用mRecycleViewAdapter.getRef(position)
片段以获取所单击项目的数据库引用。
Update
再想一想,我可能更喜欢这个答案https://stackoverflow.com/a/26196831/209103:
mMessages.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Log.w(TAG, "You clicked on "+position);
mRecycleViewAdapter.getRef(position).removeValue();
}
}));
它使用RecyclerItemClickListener
我链接的答案中的辅助类。正如已经说过的:只要您有一个点击/触摸侦听器来告诉您所选项目的位置,它的其余 FirebaseUI 方面将是相同的:调用adapter.getRef(position)
获取所选项目的数据库参考。