Nesting Android ViewPager, Swiping ListItems inside a ListView horizontally
android, android-viewpager, listview, nested
Solution
I added an `OnTouchListener` to the interior `ViewPager`:
private OnTouchListener mSuppressInterceptListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(
event.getAction() == MotionEvent.ACTION_DOWN &&
v instanceof ViewGroup
) {
((ViewGroup) v).requestDisallowInterceptTouchEvent(true);
}
return false;
}
};
This just detects ACTION_DOWN touch events on the inner `ViewPager` and prevents the outer one from intercepting it. Because it returns false, only the ACTION_DOWN event should be hit; all the other events will be ignored. You can add this listener to every element you want to "protect" from the outer `ViewPager`'s scrolling, though obviously if you want to pick up any other touch behaviour on those elements you'll need to deal with them inside the touch listener and possibly implement a better listener.
Credit to @Rodja who gave me the idea in the first place.
Problem
I have a ViewPager on the root-level of an activity. Each page of the pager contains a ListFragment (backed by a FragmentPagerAdapter). Some of the list view items should contain additionally ViewPagers to support swiping the content of those items (e. g. a horizontal gallery inside a list item). How can I nest view pagers? ViewPager -> ListView (in a page) -> ViewPager (inside a list item) I can swipe between the ListFragments horizontally and I can swipe the whole list vertically, but I cannot swipe inside list items.