【问题标题】:How to get click event of whole list item which contains grid view?如何获取包含网格视图的整个列表项的单击事件?
【发布时间】:2020-04-13 04:30:06
【问题描述】:

我创建了一个列表视图,其中包含一个文本视图和一个网格视图。网格视图项包含文本视图。如下所示:

Listview
---------------------------
Item 1
[grid item 1] [grid item 2]
---------------------------
Item 2
[grid item 1] [grid item 2]
[grid item 3] [grid item 4]
---------------------------

我已经通过 gridView.setEnabled(false); 禁用了网格视图项的点击事件;我希望使用 onClickListener() 来单击整个列表项。我可以从列表项的部分区域获取点击事件。但是,我无法从网格视图区域获取点击事件。

我已经经历了几个线程,但无法解决所述问题。

我试过了:

  1. 在 gridview 项的最顶层视图组中使用 android:descendantFocusability="blocksDescendants"
  2. 在包含 gridview 的视图组中使用 android:descendantFocusability="blocksDescendants"
  3. 在包含 gridview 的视图组中使用 android:focusable="true" android:focusableInTouchMode="true"。

我还尝试了各种线程的其他方法,但无法解决问题。

【问题讨论】:

    标签: java android


    【解决方案1】:

    如果您想检测对 View 对象的点击,您可能需要在 XML 中设置 android:clickable="true"

    https://developer.android.com/reference/android/view/View.html#attr_android:clickable

    【讨论】:

    • Gridview 从父列表视图中窃取点击事件的焦点。将 gridview 项目设置为 true 并不起作用。
    【解决方案2】:

    解决方案:如果其中一个孩子的 focusable 或 clickable 属性为 true,则父级将无法获得该孩子所在区域的焦点或单击事件。

    我通过对 gridview 应用以下方法解决了这个问题:

        gridView.setEnabled(false);
        gridView.setClickable(false);
        gridView.setFocusable(false);
    

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 2019-09-29
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多