【问题标题】:Grasping the fragment of a viewpager抓住浏览器的片段
【发布时间】:2016-01-21 03:02:51
【问题描述】:

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

我的问题是如何获取指向当前选定片段的指针?

我尝试了以下方法:

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

但它总是返回 null。

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

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

【问题讨论】:

    标签: java android android-fragments android-viewpager


    【解决方案1】:

    您需要覆盖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) {
    
        }
    });
    

    【讨论】:

    • 是的,这就是我想要做的。但是,问题是我没有指向当前显示片段的指针。那么,如何获取当前的片段呢?
    • 制作一个自定义页面适配器类。然后将适配器设置为 viewpager。如果我做对了。让我编辑答案。
    • 是的,这就是我现在所拥有的。但问题是:假设位置 1 的片段在屏幕上。在 onPageSelected 中,我想在 fragmentB(屏幕上可见的实例)上调用一个方法。如何让片段调用该方法?如果我调用了 adapter.getItem(1),它将返回一个新的 fragmentB 实例。有什么我想念的吗?
    • 你为什么要这样做?
    • 我猜你在片段 A 上时试图从片段 B 中获取一些值?对吗?
    【解决方案2】:

    编辑: 在here

    找到了我想出的解决方案的更好实现

    经过一段时间的调试,我想出了一个解决方案。 通过保留先前访问的片段的外部数据结构。就我而言,我保留了一个 HashMap,因为普通数组不起作用。在某些情况下,我调用 pager.setCurrentItem(position)。意思是我跳跃的片段。所以HashMap比较合适。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多