如何实现 SetOnItemClickListener FirebaseRecyclerViewAdapter

2023-11-21

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

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

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)获取所选项目的数据库参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现 SetOnItemClickListener FirebaseRecyclerViewAdapter 的相关文章

随机推荐