我有一个包含2个片段的视图寻呼机。其中一个有蓝色屏幕,一旦选择了片段就应该隐藏它。所以,我想掌握一个指向这个片段的指针,一旦用户选择了这个片段,我就可以调用它。我已经实现了addOnPageChangeListener接口。我想在onPageSelected调用中调用该方法来隐藏蓝屏。
我的问题是如何掌握指向当前所选片段的指针?
我尝试了以下内容:
AnswersFragment fragment = (AnswersFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + this.pager + ":" + position);
if (fragment == null)
fragment = new AnswersFragment();
但它总是返回null。
我还试图保留一个名为currentAnswerFragment的实例变量,但它不一定指向当前片段,因为视图寻呼机同时跟踪3个片段。
另外,我的模型不是片段的数组(或2)。我调用一个初始化片段并返回它的函数。话虽如此,我不能使用当前项的索引来显示片段。
答案 0 :(得分:0)
您需要在所需的屏幕上覆盖onPageSelected
方法和激发尊重的方法,例如:
@Override
public void onPageSelected(int position) {
if (position == 0) {
callForPage();
} else if (position == 1) {
callForPage1();
}
}
您可以使用以下代码转到所选屏幕。
viewPager.setCurrentItem(pageposition,false);
setCurrentItem
有两个参数:项目编号和布尔值,用于平滑滚动。
<强>更新强>
制作一个PageAdapter类,例如
public class PagerAdapter extends FragmentPagerAdapter {
Context mcontext;
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
mcontext = context;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new FragmentA();
}
else if(position==1){
return new FragmentB();
}
else
return new FragmentC();
}
@Override
public int getCount() {
return 3;
}
}
然后在你的Activity类
中mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this));
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
///Here you handle the pointer thing
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
答案 1 :(得分:0)
编辑: 我找到了一个更好的解决方案实现here
经过一段时间的调试,我找到了一个解决方案。 通过保持访问的先前片段的外部数据结构。在我的情况下,我保持HashMap作为普通数组将无法正常工作。在某些情况下,我调用pager.setCurrentItem(position)。这意味着我跳了碎片。所以HashMap更合适。