【发布时间】:2019-06-14 05:25:04
【问题描述】:
我有几个用ViewPager 组织的片段。我在 MainActivity 的 onCreate 方法中的 ViewPager 中添加了一个 addOnPageChangeListener,它给出了所选片段的位置。
即使我通过声明setOffscreenPageLimit 来防止片段自行破坏,但我仍然没有弄清楚如何从 MainActivity 访问片段,因为简单地使用findViewById 会返回空对象异常。
我想做的事:
我想访问片段的元素,例如布局和滚动视图,在ViewPager 的OnPageListener 中:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int i) {
if(i == 0) {
// Do something with the first fragment.
} else if(i == 1) {
// Do something with the second fragment.
}
}
}
ViewPager 使用FragmentPagerAdapter:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return Fragment1.newInstance(position);
case 1:
return Fragment2.newInstance(position);
case 2:
return Fragment3.newInstance(position);
case 3:
return Fragment4.newInstance(position);
default:
throw new IllegalArgumentException();
}
}
@Override
public int getCount() {
return 4;
}
}
是这样添加的:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
~
或者我应该改变我的方法吗?
如果使用这种设计无法访问片段,那么有效的替代途径是什么?
我尝试在自定义ViewPager 中实现ViewPager.onPageChangeListener,但这似乎不是一个好的选择。
我可以处理各自片段中的元素,但这是一个繁琐且难以维护的过程,这就是我寻找一种同时处理它们的方法的原因。
我知道以前有人问过类似的问题,但我没有找到解决方案。
【问题讨论】:
-
在不知道 ViewPager 的适配器代码的情况下无法回答这个问题。
-
@EpicPandaForce 我已经添加了适配器的代码。
标签: java android android-fragments android-viewpager