Reputation: 55
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;
}
Upvotes: 4
Views: 2792
Reputation: 197
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();
}
});
Upvotes: 1
Reputation: 183
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="⋮"
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.
Upvotes: 1
Reputation: 3930
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;
}
}
Upvotes: 7