【问题标题】:fragment setOnTouchListener not triggered片段 setOnTouchListener 未触发
【发布时间】:2021-07-25 07:03:44
【问题描述】:

我有以下 kotlin 代码,但无法调用 onTouch\click 侦听器。 我正在使用模拟器,我在很多地方多次单击该片段,但似乎没有任何东西让听众打电话。我设置了断点并打印\日志,却一无所获...

gridview 有一个 onItemClick。如果我删除了gridview - 触摸监听器工作,但我确实需要gridview 和onItemClick。那么如何将两者结合起来呢?

片段 xml:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:focusable="true"
    tools:context=".fragments.MainAppFragment">

        <GridView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="150dp"
        android:id="@+id/my_grid_view"
        android:horizontalSpacing="15dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="15dp"
        />
</FrameLayout>

片段类:

    class MainAppFragment : Fragment(){

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
          val view = inflater.inflate(R.layout.fragment_main_app, container, false)

          view.setOnClickListener {
            Log.d("TAG", "onTouch entered");
          }
          view.setOnTouchListener { v, event ->
            print(event.action)
            true
          }

          return view
    }
}

【问题讨论】:

    标签: android kotlin touch-event ontouchlistener


    【解决方案1】:

    发生的情况是,您在 FrameLayout 上设置了点击侦听器,但点击实际上已发送到 GridView,因为它覆盖了您的根视图 (FrameLayout) 的整个维度。

    你可以

    1. 减小GridView 的维度,以便将事件分派到根布局。
    2. 在实际发生事件的GridView 上设置您的点击侦听器。

    【讨论】:

    • 我需要稍微减小网格视图的尺寸吗?或者点击实际上是在gridview之外?
    • 减小尺寸会导致GridView外部点击被调度到FrameLayout,但GridView 内部发生的点击仍将被调度到网格本身。如果您真的想捕捉网格上的点击,那么第二个选项将是正确的选择。
    • 我尝试了以下方法,但它也不起作用 gridView?.setOnTouchListener { v, event -> Log.d("asd", "asd");真的}
    • gridview 上的 setontouchlistener 也不起作用
    • 我可以看到,如果我删除 gridview,侦听器会工作,但我确实需要 gridview,所以我会感谢在 gridview 上正确设置 ontouchlistener 的帮助。我还应该提到我的 gridview 有一个 onItemClick
    【解决方案2】:

    为 gridview 启动变量,发现它是我想要的 然后为该变量执行 setOnClickListener 并返回视图..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多