【问题标题】:how to use context menu on recyclerview item provided by firebaseui如何在firebaseui提供的recyclerview项目上使用上下文菜单
【发布时间】:2016-10-21 20:56:22
【问题描述】:

我想知道如何在 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");
    }
}

【问题讨论】:

  • 这是我的第二个问题,所以我没有经验,如果您需要其他信息或有任何问题,请随时提出。提前致谢

标签: android android-recyclerview navigation-drawer firebaseui android-contextmenu


【解决方案1】:

我已经通过在这篇文章中使用这个解决方案解决了这个问题: How to create context menu for 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;
                }

            });
        }
    }

最后在 Fragment/Activity 中覆盖 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);
    }

希望它对你有用!

【讨论】:

  • 它成功了,谢谢,但现在有另一个问题,我的 menuInfo 为空。我会寻找任何解决方案。还是谢谢
  • 菜单信息。这是什么意思?
  • ContextMenu.ContextMenuInfo menuInfo 来自 onCreateContextMenu 应该保存选定的视图信息。
  • 我认为这个位置足以从你的数据数组中获取数据
猜你喜欢
  • 2019-01-08
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多