Bewegungsereignis an übergeordnete Bildlaufansicht übergeben, wenn Listenansicht oben / unten
Ich habe einListView
in einemScrollView
, um Kommentare anzuzeigen, und ich möchte Folgendes tun:
Wenn der Benutzer nach unten streicht, wird zuerst dasScrollView
sollte vollständig nach unten scrollen, da sich die Liste unten befindet. Sobald es vollständig ausgefallen ist, wird dasListiew
sollte mit dem Scrollen beginnen.
Auch wenn der Benutzer einen Bildlauf durchführt, wird zuerst dasListView
(Reihenfolge hier umgekehrt!) sollte nach oben scrollen, bevor dasScrollView
beginnt zu scrollen.
isher habe ich folgendes gemacht:
listView.setOnTouchListener(new View.OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// If going up but the list is already at up, return false indicating we did not consume it.
if(event.getAction() == MotionEvent.ACTION_UP) {
if (listView.getChildCount() == 0 && listView.getChildAt(0).getTop() == 0) {
Log.e("Listview", "At top!");
return false;
}
}
// Similar behaviour but when going down check if we are at the bottom.
if( event.getAction() == MotionEvent.ACTION_DOWN) {
if (listView.getLastVisiblePosition() == listView.getAdapter().getCount() - 1 &&
listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight()) {
Log.e("Listview","At bottom!");
v.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
Die Protokolle werden im richtigen Moment ausgelöst, jedoch wird dasScrollView
bewegt sich nicht, obwohl ich false zurückgebe.
Ich habe auch versucht, @ hinzuzufügv.getParent().requestDisallowInterceptTouchEvent(false);
zu den Anweisungen, aber das hat auch nicht funktioniert.
Wie kann ich es zum Laufen bringen?