fragment setOnTouchListener not triggered



我有以下kotlin代码,我不能得到onTouchclick侦听器调用。我正在使用模拟器,我在许多地方多次点击片段,似乎没有什么可以调用听众。我输入断点并打印logs,但什么也没得到…

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
}
}

发生的事情是,你正在设置你的点击监听器在FrameLayout,但点击实际上被分派到GridView,因为它覆盖了你的根视图(FrameLayout)的整个维度。

  1. 为要分派到根布局的事件减少GridView的维度。
  2. 将您的点击监听器设置在事件实际发生的GridView

为gridview查找它的I'd初始化变量然后对该变量执行setOnClickListener并返回视图。

最新更新