当我从viewpager中获取items 0到2的子视图时,一切正常。但是当我尝试获取3及以后的子视图时,它返回null。我该如何获取viewpager中所有当前选定的子视图?
View view = viewPager.getChildAt(viewPager.getCurrentItem());
当viewPager.getCurrentItem()达到3及以后时,该视图返回null。
当我从viewpager中获取items 0到2的子视图时,一切正常。但是当我尝试获取3及以后的子视图时,它返回null。我该如何获取viewpager中所有当前选定的子视图?
View view = viewPager.getChildAt(viewPager.getCurrentItem());
ViewPager
中使用的Fragments
。ViewPager
适配器,以使您在ViewPager
中使用的片段可访问。链接:https://dev59.com/Auk6XIcBkEYKwwoYBvTb#39274141
实施了链接中的代码后,您将能够访问您的片段及其视图。public View getMyFragmentView(){
return this.mView();
}
ViewPager
添加一个OnPageChangeListener
。 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// Here's your instance
final YourFragment fragment =(YourFragment)yourPagerAdapter.getRegisteredFragment(position);
final View theViewYouWantToAccess = yourFragment.getMyView();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
编辑: 在您的ViewPager适配器中,您可以将Fragment
注册到SparseArray
中
@Override
public Fragment getItem(int position) {
final YourFragment fragment = new YourFragment();
// Register your fragment to Sparse Array here
registeredFragments.put(position, fragment);
return fragment;
}
void setOffscreenPageLimit(int limit)
方法来设置在当前页面两侧保留多少页以供记忆。 - zsmb13