Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Kitkat上拖动选择子菜单项? 背景_Android_Android Actionbar_Submenu_Android 4.4 Kitkat_Drag To Select - Fatal编程技术网

Android 如何在Kitkat上拖动选择子菜单项? 背景

Android 如何在Kitkat上拖动选择子菜单项? 背景,android,android-actionbar,submenu,android-4.4-kitkat,drag-to-select,Android,Android Actionbar,Submenu,Android 4.4 Kitkat,Drag To Select,我有一个应用程序,它在操作栏中有子菜单,用于选择排序类型 如果您只需轻触操作项,它的效果非常好 下面是操作栏上的子菜单的外观: 代码 为了便于理解我所做的工作,这里有一个简短、简单的子菜单部分: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://sch

我有一个应用程序,它在操作栏中有子菜单,用于选择排序类型

如果您只需轻触操作项,它的效果非常好

下面是操作栏上的子菜单的外观:

代码 为了便于理解我所做的工作,这里有一个简短、简单的子菜单部分:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.test.MainActivity" >

    <item
        android:icon="@drawable/ic_action_collections_sort_by_size_holo_dark"
        android:title="sorting"
        app:showAsAction="ifRoom">
        <menu >
            <group
                android:checkableBehavior="single"
                android:menuCategory="container" >
                <item
                    android:id="@+id/menuItem_sortByInstallTime"
                    android:title="by install time">
                </item>
                <item
                    android:id="@+id/menuItem_sortByUpdateTime"
                    android:title="by update time">
                </item>
                <item
                    android:id="@+id/menuItem_sortByAppName"
                    android:title="by app name">
                </item>
                <item
                    android:id="@+id/menuItem_sortByPackageName"
                    android:title="by package name">
                </item>
            </group>
        </menu>
    </item>

</menu>

问题 从Kitkat(Android 4.4)开始,用户可以按住触摸键,在到达想要选择的项目时离开,而不是单击项目

该功能显示在“拖动以选择”下。大多数人都不知道这个功能,但人们已经报告了一个非常恼人的bug

如果您尝试上面的代码(或我的应用程序),并使用此功能,您将注意到,您将无法再次单击相同的操作项,除非您先单击其他项

是的,在您选择其他内容之前,它将被阻止

我已经用Kitkat在Nexus4上测试了这个问题,并且可以确认它

查看其他应用程序(甚至谷歌的应用程序),我可以注意到一个类似的问题:尽管我找不到一个分组子菜单的确切例子,但对于常规子菜单,操作项只被一次阻止。再次单击它将释放它

问题 为什么会发生这种情况

我的代码有什么问题吗

这是虫子吗

我怎样才能修好它

如果没有修复,我应该创建自己的弹出菜单,还是有其他解决方法

这是虫子吗

我也可以重现它。我检查了一下,没有发现任何东西,但它确实似乎是一个bug

为什么会发生这种情况

我认为这与问题有关,但我不确定问题现在发生在哪里

我怎样才能修好它

选择
菜单项后,调用
Activity.invalidateOptions菜单

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menuItem_sortByInstallTime:
            // Do something
            break;
        case R.id.menuItem_sortByUpdateTime:
            // Do something
            break;
        case R.id.menuItem_sortByAppName:
            // Do something
            break;
        case R.id.menuItem_sortByPackageName:
            // Do something
            break;
        default:
            break;
    }
    invalidateOptionsMenu();
    return true;
}
限制


不幸的是,该解决方案似乎只适用于未放置在操作栏溢出菜单中的菜单项。如果您想进一步了解有关此问题的更新,请参阅AOSP问题跟踪程序上的。

这是可行的,但现在我还必须重新更新操作项以匹配当前状态。不知道还有没有别的办法。无论如何,谢谢你。顺便说一句,我在这里发布了一个错误报告:我认为这也应该适用于任何类型的操作项,因为其中一些操作项可能位于溢出操作项菜单中。遗憾的是,此解决方案仅适用于不在溢出操作项上的操作项。对于那些在溢出操作项上的应用程序,将出现第二个问题(谷歌的应用程序)。你知道如何解决这个问题吗?@androiddeveloper不幸的是,如果我们认为这是一个错误,并且我认为我们是正确的,那么我认为目前没有更好的解决方法。即使通过反射,也无法修改的行为。好的,如果您编辑它,我会勾选您的答案,这样人们就会知道这只适用于我写的案例。我真的希望谷歌能解决这个问题,即使是很小的问题。