抓住viewpager的片段

时间:2015-12-30 13:47:30

标签: java android android-fragments android-viewpager

我有一个包含2个片段的视图寻呼机。其中一个有蓝色屏幕,一旦选择了片段就应该隐藏它。所以,我想掌握一个指向这个片段的指针,一旦用户选择了这个片段,我就可以调用它。我已经实现了addOnPageChangeListener接口。我想在onPageSelected调用中调用该方法来隐藏蓝屏。

我的问题是如何掌握指向当前所选片段的指针?

我尝试了以下内容:

AnswersFragment fragment = (AnswersFragment)   getSupportFragmentManager().findFragmentByTag("android:switcher:" +     this.pager + ":" + position);
    if (fragment == null)
        fragment = new AnswersFragment();

但它总是返回null。

我还试图保留一个名为currentAnswerFragment的实例变量,但它不一定指向当前片段,因为视图寻呼机同时跟踪3个片段。

另外,我的模型不是片段的数组(或2)。我调用一个初始化片段并返回它的函数。话虽如此,我不能使用当前项的索引来显示片段。

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更合适。