Jon*_*lli 9 android firebase firebase-realtime-database firebaseui
如何在Firebase RecyclerView适配器中实现SetOnItemClickListener事件?我使用文档示例,聊天应用程序:
private FirebaseRecyclerViewAdapter mAdapter;
RecyclerView recycler = (RecyclerView) findViewById(R.id.messages_recycler);
recycler.setHasFixedSize(true);
recycler.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseRecyclerViewAdapter<ChatMessage, ChatMessageViewHolder>(ChatMessage.class, android.R.layout.two_line_list_item, ChatMessageViewHolder.class, mRef) {
@Override
public void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatMessage chatMessage) {
chatMessageViewHolder.nameText.setText(chatMessage.getName());
chatMessageViewHolder.messageText.setText(chatMessage.getMessage());
}
};
recycler.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
Fra*_*len 15
可能有很多方法可以做到这一点,但这是我很快就尝试过的方法.
所述ChatMessageViewHolder
类具有其中它保持每个聊天消息根视图成员字段:
public static class ChatHolder extends RecyclerView.ViewHolder {
View mView;
public ChatHolder(View itemView) {
super(itemView);
mView = itemView;
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用该mView
成员来访问可点击的视图.你应该添加一个getter 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();
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
这个问题的答案提供了大量的灵感:RecyclerView onClick.只要您可以确定用户单击的位置,就可以使用该mRecycleViewAdapter.getRef(position)
代码段获取所单击项目的数据库引用.
第二个想法我可能更喜欢这个答案/sf/answers/1833778201/:
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();
}
}));
Run Code Online (Sandbox Code Playgroud)
它使用RecyclerItemClickListener
我链接的答案中的助手类.正如已经说过的那样:只要你有一个点击/触摸监听器告诉你所选项目的位置,它的其余FirebaseUI方面将是相同的:调用adapter.getRef(position)
以获取所选项目的数据库引用.
归档时间: |
|
查看次数: |
18031 次 |
最近记录: |