【问题标题】:How to add three dot menu with each list item in listview?如何在列表视图中为每个列表项添加三个点菜单?
【发布时间】:2020-02-02 09:39:02
【问题描述】:

我想为列表视图的每个列表项添加三个点菜单。

**这是我的listview适配器getView方法**

 @Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = activity.getLayoutInflater();
    View inflate = inflater.inflate(R.layout.book_item_new, null, false);
    findViews(inflate);

    bookTitle.setText(books.get(position).getName());
    bookPrice.setText(books.get(position).getPrice() + " ₹");
    semBranch.setText(books.get(position).getSemester() + " Sem " + books.get(position).getBranch());
    date.setText(books.get(position).getpDate());
    senderName.setText(books.get(position).getSender());

    return inflate;
}

【问题讨论】:

    标签: java android listview menu


    【解决方案1】:

    book_item_new 布局中添加一个带有三点图像的ImageView

    <ImageView
        android:id="@+id/imbPopUp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:paddingLeft="18dp"
        android:paddingRight="18dp"
        android:src="@drawable/icon_menu_dot" /> 
    

    并在您的getView() 中的imageview 上设置OnclickListener,如下所示。

    imageView.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    showPopupMenu(imageView, position);
                }
            });
    
    
        /**
         * Showing popup menu when tapping on 3 dots
         */
        private void showPopupMenu(View view, int position) {
            PopupMenu popup = new PopupMenu(context, view, Gravity.END);
            MenuInflater inflater = popup.getMenuInflater();
    
            inflater.inflate(R.menu.favourite_menu, popup.getMenu());
    
            //set menu item click listener here
            popup.setOnMenuItemClickListener(new MyMenuItemClickListener(position));
            popup.show();
        }
    

    现在为您的菜单项单击创建单击侦听器类,如下所示。

    /**
         * Click listener for popup menu items
         */
        class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
            int position;
    
            /**
             * @param position
             */
            MyMenuItemClickListener(int position) {
    
                this.position = position;
            }
    
            /**
             * Click listener for popup menu items
             */
    
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.view:
                       // ...
                        return true;
                    case R.id.edit:
                        // ...
                        return true;
                    case R.id.delete:
                        // ...
                        return true;
                    case R.id.favourite:
                       // ...
                        return true;
                    default:
                }
                return false;
            }
        }
    

    【讨论】:

      【解决方案2】:

      只需将按钮添加到您的列表项中并将 onClickListener 设置为按钮。
      像这样

        button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            ContextThemeWrapper wrapper =
            new ContextThemeWrapper();
            PopupMenu popupMenu = new PopupMenu(wrapper, 'yourItemView');
      
            popupMenu.inflate(R.menu.'your_menu');
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
              @Override
              public boolean onMenuItemClick(MenuItem item) {
                // implement menu click here
                return true
              }
            });
            popupMenu.show();
          }
        });
      

      【讨论】:

        【解决方案3】:

        你可以试试这个, 在您的设计 xml 中为点添加以下代码

        <Textview
                android:id="@+id/textViewOptions"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:text="&#8942;"
                android:textAppearance="?android:textAppearanceLarge"
                android:gravity="center_horizontal|center_vertical"/>
        

        在你的绑定方法中添加以下代码,

        holder.textViewOptions.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
        
                    //creating a popup menu
                    PopupMenu popup = new PopupMenu(context, holder.textViewOptions);
                    //inflating menu from xml resource
                    popup.inflate(R.menu.menu_options);
                    //adding click listener
                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case R.id.action_delete:
                                    //handle menu1 click
                                    return true;
                                case R.id.action_edit:
                                    //handle menu2 click
                                    return true;
                                default:
                                    return false;
                            }
                        }
                    });
                    popup.show();
        
                }
            });
        

        谢谢。

        【讨论】:

          猜你喜欢
          • 2013-05-01
          • 2013-04-28
          • 2020-04-30
          • 2020-02-07
          • 1970-01-01
          • 2017-09-13
          • 2021-03-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多