Sieht aus wie RecyclerView Stück Layout klickbare = "true", verbrauchen einige Touch-Ereignisse vollständig, besonders MotionEvent.ACTION_DOWN
Einstellung (ACTION_MOVE und ACTION_UP danach arbeiten):Android: RecyclerView Element, wenn in anklickbare Blöcke OnTouch Ereignisse gesetzt
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>
mit sehr einfachen RecyclerView Setup in onCreate():
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;
}
});
Ist das beabsichtigte Verhalten oder Fehler in RecyclerView, weil es immer noch eine Vorschau ist?
PS. Ich möchte, dass diese wie in der Dokumentation anklickbar ist, um auf den gedrückten Zustand zu reagieren und beim Klicken Klickeffekte zu haben. Bei falscher Einstellung funktioniert ACTION_DOWN einwandfrei, aber der gedrückte Status wird nicht ausgelöst, und selectableBackground hat keine Auswirkungen.
Versuchen 'android Einstellung: fokussierbarem =„true“', ich habe nicht getestet, weshalb ich nicht bin Bereitstellung es als eine Antwort, aber ACTION_DOWN zu mir scheint wie ein fokusbezogenes Ereignis. – RyanJohnstone
@Iija, Hast du irgendeine Lösung bekommen? Ich stecke jetzt seit einigen Tagen an demselben Problem fest. – Manu
@Manu, dachte ich, dies ist das beabsichtigte Verhalten. Sie können erreichen, was Sie wollen, indem Sie stattdessen recyclerView.addOnItemTouchListener() verwenden .... –