简体   繁体   中英

How to add three dot menu with each list item in listview?

I wanted to add three dot menu with each listitem of listview.

**This is my listview adapter getView method **

 @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;
}

Add a ImageView with an image of three-dot in your book_item_new layout.

<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" /> 

And set OnclickListener on this imageview inside your getView() like the following.

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();
    }

Now create click listener class for your menu item click like below.

/**
     * 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;
        }
    }

Just add button into your listitem and set onClickListener to the button.
like this

  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();
    }
  });

you can try this, In your design xml add following code for dots

<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"/>

After this in your on bind method add following code,

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();

        }
    });

Thank You.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM