【问题标题】:Android in TabLayout, ViewPager Fragments not updating consistantlyTabLayout中的Android,ViewPager Fragments未一致更新
【发布时间】:2015-08-31 07:11:14
【问题描述】:

我的 android 应用程序中有一个 TabLayout 和 ViewPager。但是,当我使用滑动将“Tab1”更改为“Tab2”并使用单击“Tab1”返回第一个选项卡时,我的 viewpager 中的片段不会更新。

如果我使用滑动从“Tab2”移动到“Tab3”,然后尝试单击选项卡返回到 Tab2,也会出现类似问题。

否则 TabLayout 可以正常工作,如果我使用任何其他滑动或点击组合,所有选项卡都将被更新并显示正确的片段。

        //set tabs and viewpager
    ViewPager viewPager = (ViewPager) findViewById(R.id.mViewPager);
    viewPager.setAdapter(new MyFragmentPageAdapter(getSupportFragmentManager(), MainActivity.this));

    //layout
    TabLayout tabLayout= (TabLayout) findViewById(R.id.mTabs);
    tabLayout.setupWithViewPager(viewPager);

【问题讨论】:

    标签: android android-fragments android-tablayout


    【解决方案1】:

    你应该实现setOnTabSelectedListener

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
               viewPager.setCurrentItem(tab.getPosition());
            }
    });
    

    【讨论】:

    【解决方案2】:

    已经很晚了,但我找到了使用 FragmentPagerAdapter 的最佳方法

    viewpager create 方法中使用的所有片段中的第一个,如下所示。

    公共无效更新视图(){ //更新您要更新的任何视图或数据 }

    还覆盖方法 setUserVisibleHint,该方法在 FragmentPagerAdapter 中用于通知片段是否对用户可见。

    @覆盖 公共无效 setUserVisibleHint(boolean isVisibleToUser) { this.isVisibleToUser = isVisibleToUser; super.setUserVisibleHint(isVisibleToUser); }

    最后在您的片段中添加以下代码以在片段可见时更新视图/日期。

    @覆盖 公共无效 onStart() { if (isVisibleToUser) 更新视图(); }

    然后在你的 TabFragment 或 Activity 中实现它

    viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @覆盖 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @覆盖 公共无效 onPageSelected(int position) { 开关(位置){ 案例0:{ ((Fragment) mFragmentList.get(0)).updateView(); 休息; } 情况1: { ((Fragment) mFragmentList.get(1)).updateView(); 休息; } } }

    这将负责一致地更新数据,您可以滑动或单击选项卡,它经过良好测试,如果有人发现任何问题或错误,请发表评论并让我知道或随时编辑解决方案。

    【讨论】:

      【解决方案3】:

      试试这个

      mViewPager.setOffscreenPageLimit(2); // if you use 3 tabs 
      mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                  @Override
                  public void onPageSelected(int position) {
                      mTabLayout.getTabAt(position).select();
                  }
      });
      

      注意mViewPager.setOffscreenPageLimit(2); 默认值是 1,但我在使用 recyclerview 时遇到了一些麻烦

      【讨论】:

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