package android.support.v4.view; import android.view.View; import android.view.ViewGroup; public class ViewPagerUtils { public interface CurrentView { View currentView(); } // please note that it registers OnHierarchyChangedListener, so if any has already been registered // it will be removed public static CurrentView currentView(final ViewPager pager) { return CurrentViewImpl.create(pager); } private static class CurrentViewImpl implements CurrentView, ViewGroup.OnHierarchyChangeListener { static CurrentView create(ViewPager pager) { final CurrentViewImpl impl = new CurrentViewImpl(pager); pager.setOnHierarchyChangeListener(impl); return impl; } private final ViewPager mViewPager; private View mView; private CurrentViewImpl(ViewPager viewPager) { mViewPager = viewPager; } @Override public View currentView() { final View view; if (mView != null) { view = mView; } else { final int position = mViewPager.getCurrentItem(); final int count = mViewPager.getChildCount(); if (count == 0 || position < 0) { view = null; } else { View child = null; ViewPager.LayoutParams params; for (int i = 0; i < count; i++) { child = mViewPager.getChildAt(i); params = (ViewPager.LayoutParams) child.getLayoutParams(); if (params != null && params.position == position) { break; } child = null; } mView = view = child; } } return view; } @Override public void onChildViewAdded(View parent, View child) { mView = null; } @Override public void onChildViewRemoved(View parent, View child) { mView = null; } } }