Android ViewPager获取当前视图

我有一个ViewPager,我想获得当前select的可见视图,而不仅仅是一个数字。

  1. getChildAt(getCurrentItem)返回错误的View

     @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser == true) { mFocusedListView = ListView; } } 
  2. 这是第二个代码,这不是一直在悲伤的工作。 有时返回null,有时只是返回错误的View

  3. ViewPager上的ViewPagergetChildAt()一起工作也不行,每次都不给我正确的View。

我想如何取回当前可见的视图?

 view = MyActivity.mViewPager.getChildAt(MyActivity.mViewPager.getCurrentItem()).getRootView(); listview = (ListView) view.findViewById(R.id.ListViewItems); 

好吧,我想出来,我只是添加setTag所有视图/ ListViews的名称,只是调用findViewWithTag(mytag),所以目前没有其他的方式来做到这一点。

谢谢Leslie

您可以通过访问您的适配器调用myAdapter.yourListItens.get(myViewPager.getCurrentItem());列表来获取当前元素myAdapter.yourListItens.get(myViewPager.getCurrentItem()); 如您所见,ViewPager可以检索适配器(当前页面)的当前元素索引。

如果你使用FragmentPagerAdapter,你可以这样做:

 FragmentPagerAdapter adapter = (FragmentPagerAdapter)myViewPager.getAdapter(); 

并打电话

 adapter.getItem(myViewPager.getCurrentItem()); 

这对我来说很好;)

我刚刚遇到同样的问题,并通过使用以下解决scheme:

 View view = MyActivity.mViewPager.getFocusedChild(); 

这是如何发挥你们都的?

 public Object instantiateItem(final ViewGroup container, final int position) { CustomHomeView RL = new CustomHomeView(MainActivity.ctxt); if (position==0){ container.setId(R.id.home_container);} ...rest of code 

那么这里是访问你的页面的代码

 ((ViewGroup)pager.findViewById(R.id.home_container)).getChildAt(pager.getCurrentItem()).setBackgroundColor(Color.BLUE); 

如果你想要,你可以设置一个小的方法

 RelativeLayout getPageAt(int index){ RelativeLayout rl = ((RelativeLayout)((ViewGroup)pager.findViewById(R.id.home_container)).getChildAt(index)); return rl; } 

在我努力寻找装饰android视图的方法的过程中,我想为我的博客中logging的OP问题定义了替代解决scheme。 我连接到它,因为代码似乎有点太多,包括一切在这里。

我提出的解决scheme是:

  • 保持适配器和视图完全分离
  • 人们可以很容易地查询任何索引forms的视图寻呼机,如果这个视图当前没有加载或相应的视图,他将返回null

是你在屏幕上的第一个活动,还是你已经分层了一些?

尝试这个:

 findViewById(android.R.id.content).getRootView() 

要不就:

 findViewById(android.R.id.content) 

还取决于你想要什么尝试:

 ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0) 

尝试这个

  final int position = mViewPager.getCurrentItem(); Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":" + position); 

我必须做得更一般,所以我决定使用ViewPager.LayoutParams的私有“位置”

  final int childCount = viewPager.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = viewPager.getChildAt(i); final ViewPager.LayoutParams lp = (ViewPager.LayoutParams) child.getLayoutParams(); int position = 0; try { Field f = lp.getClass().getDeclaredField("position"); f.setAccessible(true); position = f.getInt(lp); //IllegalAccessException } catch (NoSuchFieldException | IllegalAccessException ex) {ex.printStackTrace();} if (position == viewPager.getCurrentItem()) { viewToDraw = child; } } 

请检查这个

 ((ViewGroup))mViewPager.getChildAt(MyActivity.mViewPager.getCurrentItem())); 

否则validation这个链接 。

如果仔细检查,ViewPager最多只能保存3个视图。 你可以很容易地得到当前的观点

 view = MyActivity.mViewPager.getChildAt(1);