Android ListView:当行具有可单击的小部件时,如何显示项目选择器?

Android ListView:当行具有可单击的小部件时,如何显示项目选择器?,android,android-listview,Android,Android Listview,我已经为此奋斗了相当长的一段时间,尽管我很确定这个问题已经解决了一千多次。我已经在某地和其他地方研究了各种其他类似的问题,但我没有能够解决这个问题 核心问题是: 当列表项中有可单击组件时,如果我长时间单击一行以显示上下文操作栏,则该行的选择器不会出现。长点击被触发了,只是没有任何视觉反馈表明长点击正在发生 请注意,只有当行布局包含可单击项时,才会出现此问题。下面是我已经尝试过的事情的快速清单: 在“ListView”中,我已将drawSelectorOnTop设置为true,并在XML和getL

我已经为此奋斗了相当长的一段时间,尽管我很确定这个问题已经解决了一千多次。我已经在某地和其他地方研究了各种其他类似的问题,但我没有能够解决这个问题

核心问题是:

当列表项中有可单击组件时,如果我长时间单击一行以显示上下文操作栏,则该行的选择器不会出现。长点击被触发了,只是没有任何视觉反馈表明长点击正在发生

请注意,只有当行布局包含可单击项时,才会出现此问题。下面是我已经尝试过的事情的快速清单:

在“ListView”中,我已将drawSelectorOnTop设置为true,并在XML和getListView中进行了尝试 在“ListView”中,我已将choiceMode设置为singleChoice,并在XML和getListView中尝试了这一点 在“ListView”中,我将listSelector设置为各种值-透明、白色等。在XML和getListView中都尝试了这一点。 当然,承载列表中各个行的LinearLayout已将longClickable设置为true。如果没有这个,长时间的点击甚至不会被注册。 无论我做什么,长按列表项都不会显示任何类型的选择器,尽管长按确实发生了,并且我确实收到了OnItemLongClick回调

有什么线索可以说明是什么原因造成的吗

重现问题的代码:

list_item.xml activity_main.xml MainActivity.java strings.xml
在res/menu文件夹中创建ContextMenu并覆盖onCreateContextMenu方法:

 @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    menu.setHeaderTitle("Please select:");
    inflater.inflate(R.menu.context_menu, menu);
}
重写onContextItemSelected方法。不要忘记在onCreate方法中添加以下行:

registerForContextMenu(getListView());

有关详细信息,请参阅以下内容。

在res/menu文件夹中创建一个ContextMenu并覆盖onCreateContextMenu方法:

 @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    menu.setHeaderTitle("Please select:");
    inflater.inflate(R.menu.context_menu, menu);
}
重写onContextItemSelected方法。不要忘记在onCreate方法中添加以下行:

registerForContextMenu(getListView());

有关更多信息,请参阅以下内容。

您应该像这样更改列表项:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:baselineAligned="true"
              android:longClickable="true"
              android:orientation="horizontal"
              android:background="@android:drawable/list_selector_background"
        >

    <TextView
            android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
            android:id="@+id/btnGo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@android:drawable/btn_star_big_on" />

</LinearLayout>
我在线性布局中添加了android:background=@android:drawable/list\u selector\u background


希望这对您有所帮助=

您应该像这样更改列表项:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:baselineAligned="true"
              android:longClickable="true"
              android:orientation="horizontal"
              android:background="@android:drawable/list_selector_background"
        >

    <TextView
            android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
            android:id="@+id/btnGo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@android:drawable/btn_star_big_on" />

</LinearLayout>
我在线性布局中添加了android:background=@android:drawable/list\u selector\u background


希望这对您有所帮助=

请也给我们您的阵列=我很抱歉lazy@CFlex补充。我原以为不是每个人都像我这么懒。结果证明我错了:请也给我们你的阵列=我错了lazy@CFlex补充。我原以为不是每个人都像我这么懒。原来我错了:这不是显示了一个浮动菜单的弹出窗口吗?这不是我想要的。我想显示一个上下文操作栏,这是你链接到的页面的下一个部分。这不会显示一个浮动菜单类型的弹出窗口吗?这不是我想要的。我想显示一个上下文操作栏,它是你链接到的页面上的下一个部分。就这样!我欠你两天的调试工作:-。顺便问一句,列表的背景是什么?我想自定义它,因为现在,选择器只在我长按该项时出现。一旦选择完成,它就会消失。只要用户不关闭当前选择或选择CAB上的操作,我希望选择器背景显示。选择器可以根据对象的状态更改可绘制对象。你可以为state_pressed、state_focused等制作drawables。谷歌上有很多关于这个的tut。如果要在单击后设置颜色,我建议您添加属性isSelected,并在isSelected==true/false时更改linearLayout的背景色。这是一种方法,我不认为这是最好的。谢谢你的提示。我会四处看看的,成功了!我欠你两天的调试工作:-。顺便问一句,列表的背景是什么?我想自定义它,因为现在,选择器只在我长按该项时出现。一旦选择完成,它就会消失。只要用户不关闭当前选择或选择CAB上的操作,我希望选择器背景显示。选择器可以根据对象的状态更改可绘制对象。你可以为state_pressed、state_focused等制作drawables。谷歌上有很多关于这个的tut。如果要在单击后设置颜色,我建议您添加属性isSelected,并在isSelected==true/false时更改linearLayout的背景色。这是一种方法,我不认为这是最好的。谢谢你的提示。我四处看看。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:baselineAligned="true"
              android:longClickable="true"
              android:orientation="horizontal"
              android:background="@android:drawable/list_selector_background"
        >

    <TextView
            android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
            android:id="@+id/btnGo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@android:drawable/btn_star_big_on" />

</LinearLayout>