如何在firebaseui提供的recyclerview项目上使用上下文菜单

到贡萨尔维斯

我想知道如何在FirebaseUI提供的recyclerview项中放置一个上下文菜单,并且知道长按该项时能够执行一些操作。因为当我尝试在我的持有人类上使用onCreateContextMenu时,我的ContextMenuInfo带有空值。这是我的持有人课程:

public class PlayerHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
    //private static final String TAG = PlayerHolder.class.getSimpleName();
    public TextView playerName;
    public TextView playerAge;

    public PlayerHolder(View itemView) {
        super(itemView);
        playerName = (TextView) itemView.findViewById(R.id.player_name);
        playerAge = (TextView) itemView.findViewById(R.id.player_age);
        itemView.setOnCreateContextMenuListener(this);
    }

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.add(0, 1, 0, "Edit");//groupId, itemId, order, title
        menu.add(0, 2, 0, "Share");
        menu.add(0, 3, 0, "Delete");
    }

    //@Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView .AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case 1:
                //editNote(info.id);
                return true;
            case 2:
                //shareNote(info.id);
                return true;
            case 3:
                //deleteNote(info.id);
                return true;
            default:
                //return super.onContextItemSelected(item);
                return false;
        }
    }
}

这是我的firebaseui回收器适配器类

public class PlayerAdapter extends FirebaseRecyclerAdapter<Player, PlayerHolder> {

    private static final String TAG = PlayerAdapter.class.getSimpleName();
    private Context context;

    public PlayerAdapter(Class<Player> modelClass, int modelLayout, Class<PlayerHolder> viewHolderClass, DatabaseReference ref, Context context) {
        super(modelClass, modelLayout, viewHolderClass, ref);
        this.context = context;
    }

    @Override
    protected void populateViewHolder(PlayerHolder viewHolder, Player model, int position) {

        viewHolder.playerName.setText(model.getName());
        viewHolder.playerAge.setText(String.valueOf(playerAge) + " Years");
    }
}
我的意志

我已经通过在这篇文章中使用以下解决方案解决了这个问题:如何为recycleview创建上下文菜单

这是我的代码:

MessageViewHolder类别:

public static class MessageViewHolder extends RecyclerView.ViewHolder  implements View.OnCreateContextMenuListener {
        public TextView tvMessage;
        public TextView tvDateSending;
        public CircleImageView ivMessenger;
        public LinearLayout linearLayout;


        public MessageViewHolder(View v) {
            super(v);
            tvMessage = (TextView) itemView.findViewById(R.id.tvMessage);
            tvDateSending = (TextView) itemView.findViewById(R.id.tvDateSending);
            ivMessenger = (CircleImageView) itemView.findViewById(R.id.ivMessenger);
            linearLayout= (LinearLayout) itemView.findViewById(R.id.llOneToOneChat);
            v.setOnCreateContextMenuListener(this);

        }
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            menu.add(0,1 , 0, "Edit");
            menu.add(0, COPY, 0, "Copy");
            menu.add(0, DELETE, 0, "Delete");
        }

    }

MessageAdapter类:

public class MessageAdapter extends FirebaseRecyclerAdapter<Message, MessageViewHolder>{

        private Context context;
        private long prevMessageTime=0;
        public int position;

        public int getPosition() {
            return position;
        }

        public void setPosition(int position) {
            this.position = position;
        }

        public MessageAdapter(Class<Message> modelClass, int modelLayout, Class<MessageViewHolder> viewHolderClass, DatabaseReference ref, Context context) {
            super(modelClass, modelLayout, viewHolderClass, ref);
            this.context = context;
        }

        @Override
        protected void populateViewHolder(MessageViewHolder viewHolder, Message message, final int position) {
            //do something
            viewHolder.tvMessage.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    setPosition(position);
                    return false;
                }

            });
        }
    }

最后,在“片段/活动”中,覆盖onContextItemSelected,如下所示:

@Override
    public boolean onContextItemSelected(MenuItem item) {
        int position = -1;
        try {
            position = messageAdapter.getPosition();
        } catch (Exception e) {
//            Log.d(TAG, e.getLocalizedMessage(), e);
            return super.onContextItemSelected(item);
        }
        switch (item.getItemId()) {
            case 1:
                // do your stuff

                break;
            case 2:
                // copy message
                if (position!= -1){
                    ClipboardManager clipboard = (ClipboardManager) OneToOneConversationActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
                    String text = messageAdapter.getItem(position).getMessage();
                    ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
                    clipboard.setPrimaryClip(clip);

                }

                break;
            case 3:
                //delete message
                if (position!= -1)
                    messageAdapter.getRef(position).removeValue();
                break;
        }
        return super.onContextItemSelected(item);
    }

希望这对你有用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在长按时禁用上下文菜单?

来自分类Dev

如何使用上下文菜单 nautilus 压缩 rar

来自分类Dev

如何在函数中使用上下文?

来自分类Dev

如何在测试中使用上下文?

来自分类Dev

如何在TableView中的所选项目上显示上下文菜单

来自分类Dev

如何在TreeView中的项目上处理上下文菜单命令

来自分类Dev

如何使用C#在特定的树节点上启用和禁用上下文菜单项

来自分类Dev

使用上下文菜单删除自定义列表视图中的项目

来自分类Dev

确定使用上下文菜单单击的项目

来自分类Dev

禁用上下文菜单上的弹出窗口?

来自分类Dev

WPF样式触发器:在可变宽度网格上使用上下文菜单

来自分类Dev

Firefox for Android 上的 WebExtensions:是否可以使用上下文菜单的某种模拟?

来自分类Dev

如何在Chrome的信息亭模式下右键单击/长按禁用上下文菜单?

来自分类Dev

如何在 Ionic 应用程序中调用上下文菜单以保存图像?

来自分类Dev

如何为某些元素启用上下文菜单

来自分类Dev

使用上下文菜单时保留JavaScript链接

来自分类Dev

使用Java禁用上下文菜单(右键单击)

来自分类Dev

使用上下文菜单时保留JavaScript链接

来自分类Dev

如何在WP SL8.1上使用C#创建上下文菜单?

来自分类Dev

C#-如何正确触发使用上下文菜单打开的应用

来自分类Dev

(WPF DataGrid)如何使用上下文菜单复制Datagrid标头文本?

来自分类Dev

如何使用上下文菜单恢复Nautilus的旧打开?

来自分类Dev

如何使用上下文菜单运行C / C ++程序(右键单击选项)

来自分类Dev

如何从上下文菜单获取有关RecyclerView项目的信息

来自分类Dev

如何在RSpec中重用上下文?

来自分类Dev

使用上下文菜单在自定义列表视图中突出显示所选项目?

来自分类Dev

使用上下文API时如何在React JS中使用Match道具

来自分类Dev

调用Gatsby createPage后如何在React Component类中使用上下文

来自分类Dev

如何在Angular组件中使用上下文渲染模板?

Related 相关文章

  1. 1

    如何在长按时禁用上下文菜单?

  2. 2

    如何使用上下文菜单 nautilus 压缩 rar

  3. 3

    如何在函数中使用上下文?

  4. 4

    如何在测试中使用上下文?

  5. 5

    如何在TableView中的所选项目上显示上下文菜单

  6. 6

    如何在TreeView中的项目上处理上下文菜单命令

  7. 7

    如何使用C#在特定的树节点上启用和禁用上下文菜单项

  8. 8

    使用上下文菜单删除自定义列表视图中的项目

  9. 9

    确定使用上下文菜单单击的项目

  10. 10

    禁用上下文菜单上的弹出窗口?

  11. 11

    WPF样式触发器:在可变宽度网格上使用上下文菜单

  12. 12

    Firefox for Android 上的 WebExtensions:是否可以使用上下文菜单的某种模拟?

  13. 13

    如何在Chrome的信息亭模式下右键单击/长按禁用上下文菜单?

  14. 14

    如何在 Ionic 应用程序中调用上下文菜单以保存图像?

  15. 15

    如何为某些元素启用上下文菜单

  16. 16

    使用上下文菜单时保留JavaScript链接

  17. 17

    使用Java禁用上下文菜单(右键单击)

  18. 18

    使用上下文菜单时保留JavaScript链接

  19. 19

    如何在WP SL8.1上使用C#创建上下文菜单?

  20. 20

    C#-如何正确触发使用上下文菜单打开的应用

  21. 21

    (WPF DataGrid)如何使用上下文菜单复制Datagrid标头文本?

  22. 22

    如何使用上下文菜单恢复Nautilus的旧打开?

  23. 23

    如何使用上下文菜单运行C / C ++程序(右键单击选项)

  24. 24

    如何从上下文菜单获取有关RecyclerView项目的信息

  25. 25

    如何在RSpec中重用上下文?

  26. 26

    使用上下文菜单在自定义列表视图中突出显示所选项目?

  27. 27

    使用上下文API时如何在React JS中使用Match道具

  28. 28

    调用Gatsby createPage后如何在React Component类中使用上下文

  29. 29

    如何在Angular组件中使用上下文渲染模板?

热门标签

归档