当前位置:  开发笔记 > Android > 正文

如何实现SetOnItemClickListener FirebaseRecyclerViewAdapter

如何解决《如何实现SetOnItemClickListenerFirebaseRecyclerViewAdapter》经验,为你挑选了1个好方法。

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

Frank van Pu.. 15

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

所述ChatMessageViewHolder类具有其中它保持每个聊天消息根视图成员字段:

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

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

我们可以使用该mView成员来访问可点击的视图.你应该添加一个getter mView,但我正在尝试最小化这里的更改.

那么populateView我们可以使用具有附加position参数的重载并将其连接起来,OnClickListener如下所示:

    mRecycleViewAdapter = new FirebaseRecyclerAdapter(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)代码段获取所单击项目的数据库引用.

更新

第二个想法我可能更喜欢这个答案/sf/ask/17360801/:

    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)以获取所选项目的数据库引用.



1> Frank van Pu..:

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

所述ChatMessageViewHolder类具有其中它保持每个聊天消息根视图成员字段:

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

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

我们可以使用该mView成员来访问可点击的视图.你应该添加一个getter mView,但我正在尝试最小化这里的更改.

那么populateView我们可以使用具有附加position参数的重载并将其连接起来,OnClickListener如下所示:

    mRecycleViewAdapter = new FirebaseRecyclerAdapter(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)代码段获取所单击项目的数据库引用.

更新

第二个想法我可能更喜欢这个答案/sf/ask/17360801/:

    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)以获取所选项目的数据库引用.


添加"Firebase RecyclerView Adapter"类的方法是"get Item(position)",它返回相关对象.在上面的例子中放入onClick:String myString = getItem(itemPosition);
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有