Android 弹出菜单出现时停止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

我有一个listview,它的每个项目都有一个按钮。当点击一个项目的按钮时,我想显示一个弹出菜单有很多选项(大约8个选项)

问题是,当弹出菜单出现时,listview会沿着它滚动,这样它就不会关注单击的项目。 请帮忙

显示弹出菜单的我的代码:

// '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作为弹出菜单。