如何在列表视图中为每个列表项添加三点菜单?
How to add three dot menu with each list item in 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;
}
只需将按钮添加到您的列表项中并将 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();
}
});
在您的 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();
}
现在为您的菜单项点击创建点击侦听器 class,如下所示。
/**
* 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;
}
}
你可以试试这个,
在您的设计中 xml 为点添加以下代码
<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"/>
在此之后,在您的绑定方法中添加以下代码,
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();
}
});
谢谢。
我想为列表视图的每个列表项添加三个点菜单。
**这是我的列表视图适配器 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;
}
只需将按钮添加到您的列表项中并将 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();
}
});
在您的 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();
}
现在为您的菜单项点击创建点击侦听器 class,如下所示。
/**
* 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;
}
}
你可以试试这个, 在您的设计中 xml 为点添加以下代码
<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"/>
在此之后,在您的绑定方法中添加以下代码,
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();
}
});
谢谢。