Android 弹出菜单出现时停止listview滚动
我有一个listview,它的每个项目都有一个按钮。当点击一个项目的按钮时,我想显示一个弹出菜单有很多选项(大约8个选项) 问题是,当弹出菜单出现时,listview会沿着它滚动,这样它就不会关注单击的项目。 请帮忙 显示弹出菜单的我的代码:Android 弹出菜单出现时停止listview滚动,android,android-listview,popupmenu,Android,Android Listview,Popupmenu,我有一个listview,它的每个项目都有一个按钮。当点击一个项目的按钮时,我想显示一个弹出菜单有很多选项(大约8个选项) 问题是,当弹出菜单出现时,listview会沿着它滚动,这样它就不会关注单击的项目。 请帮忙 显示弹出菜单的我的代码: // 'view' is the button in a row private void showPopupMenu(final View view){ PopupMenu popupMenu = new PopupMenu(getContex
// 'view' is the button in a row
private void showPopupMenu(final View view){
PopupMenu popupMenu = new PopupMenu(getContext(), view);
popupMenu.getMenuInflater().inflate(R.menu.menu_popup, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (mMenuItemClickListener != null){
int position = (int) view.getTag();
return mMenuItemClickListener.onMenuItemClick(item, (int) getItemId(position), position);
}
return false;
}
});
popupMenu.show();
}
创建一个如下所示的方法:
private void stopScroll(AbsListView view)
{
try
{
Field field = android.widget.AbsListView.class.getDeclaredField("mFlingRunnable");
field.setAccessible(true);
Object flingRunnable = field.get(view);
if (flingRunnable != null)
{
Method method = Class.forName("android.widget.AbsListView$FlingRunnable").getDeclaredMethod("endFling");
method.setAccessible(true);
method.invoke(flingRunnable);
}
}
catch (Exception e) {}
}
无论何时何地,只要按如下方式调用此方法即可停止滚动
stopScroll(listView)代码>您是否尝试过使用关联菜单?它将像一个弹出窗口,但应该将ListView锁定到位。谢谢@Squonk,我曾经使用上下文菜单,但是popupmenu是一个更好的设计和体验。它对你有用吗?在我看来,它不工作,我在调用showPopupMenu()之前和之后调用stopScroll(),但当弹出菜单显示时,它仍然滚动。我使用appcompat v7作为弹出菜单。