gpt4 book ai didi

android - 如何实现 SetOnItemClickListener FirebaseRecyclerViewAdapter

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:56 25 4
gpt4 key购买 nike

如何在 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);

最佳答案

可能有很多方法可以做到这一点,但这是我很快尝试过的一种。

ChatMessageViewHolder 类有一个成员字段,用于保存每条聊天消息的 Root View :

public static class ChatHolder extends RecyclerView.ViewHolder {
View mView;

public ChatHolder(View itemView) {
super(itemView);
mView = itemView;
}

我们可以使用 mView 成员来访问可点击 View 。您应该mView 添加一个 getter,但我尽量减少此处的更改。

然后在 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();
}
});
}
};

这个问题的答案提供了大量的灵感:RecyclerView onClick .只要您可以确定用户点击的位置,您就可以使用 mRecycleViewAdapter.getRef(position) fragment 来获取被点击项目的数据库引用。

更新

再想想我可能更喜欢这个答案 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) 获取所选项目的数据库引用。

关于android - 如何实现 SetOnItemClickListener FirebaseRecyclerViewAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com