【发布时间】:2014-08-29 14:43:37
【问题描述】:
似乎将 RecyclerView 的项目布局设置为 clickable="true",完全消耗 一些 触摸事件,特别是 MotionEvent.ACTION_DOWN(之后的 ACTION_MOVE 和 ACTION_UP 正在工作):
item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/demo_item_container"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"> <-- this what breaks touch event ACTION_DOWN
....
</LinearLayout>
在 onCreate() 中有非常基本的 RecyclerView 设置:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
... //Standard recyclerView init stuff
//Please note that this is NOT recyclerView.addOnItemTouchListener()
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.d("", "TOUCH --- " + motionEvent.getActionMasked());
//Will never get here ACTION_DOWN when item set to android:clickable="true"
return false;
}
});
这是 RecyclerView 中的预期行为或错误,因为它仍然是预览版吗?
PS。我希望根据文档可以点击它以对按下状态做出反应并对点击产生连锁反应。当设置为 false 时,ACTION_DOWN 工作正常,但未触发按下状态,并且 selectableBackground 没有任何效果。
【问题讨论】:
-
尝试设置
android:focusable="true",我没有测试过这个,这就是为什么我没有提供它作为答案,但 ACTION_DOWN 对我来说似乎是一个焦点相关的事件。 -
@Iija,你有什么解决办法吗?我被同样的问题困扰了好几天了。
-
@Manu,我最终认为这是预期的行为。你应该能够通过使用 recyclerView.addOnItemTouchListener() 来实现你想要的......
标签: android android-recyclerview