繁体   English   中英

Android在TabLayout中,ViewPager片段无法持续更新

[英]Android in TabLayout, ViewPager Fragments not updating consistantly

我的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);

您应该实现setOnTabSelectedListener

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

它晚了,但我想出了使用FragmentPagerAdapter的最佳方法

首先,在viewpager create方法中使用的所有片段如下所示。

public void updateView() {
  //Update whatever views or data you want to update
}

还要重写FragmentPagerAdapter中使用的setUserVisibleHint方法,以通知该片段是否对用户可见。

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        this.isVisibleToUser = isVisibleToUser;
        super.setUserVisibleHint(isVisibleToUser);
    }

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

@Override
    public void onStart() {
            if (isVisibleToUser)
                updateView();
    }

然后在您的TabFragment或Activity中实现

viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

                switch (position) {
                    case 0: {
                         ((Fragment) mFragmentList.get(0)).updateView();
                        break;
                    }
                    case 1: {
                         ((Fragment) mFragmentList.get(1)).updateView();
                        break;
                    }
                }
            }

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

尝试这个

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中使用它时遇到了一些麻烦

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM