【问题标题】:Android | stop TabLayout reload/refresh my Fragments安卓 |停止 TabLayout 重新加载/刷新我的片段
【发布时间】:2016-04-09 23:13:16
【问题描述】:

我有一个类似的标签布局,有 4 个标签。

当我从 tab 0 转到 tab 2 然后我回到 tab 0 时,Fragment0 被重新加载.. 同样的问题我从一个标签转到另一个“离开”标签。
我只会在第一次加载 Fragment 并重新使用它们,而无需重新加载。

这是我代码的一部分(我使用的是this tutorial):

我的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    if(getSupportActionBar()!=null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = MyActivity.this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(ContextCompat.getColor(MyActivity.this, R.color.colorPrimaryDark));
    }

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF"));
    tabLayout.setupWithViewPager(viewPager);
    setupTabIcons(); //I have only icon, not text.
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(MyFragment.newInstance(0));
    adapter.addFragment(MyFragment.newInstance(1));
    adapter.addFragment(new DifferentFragment());
    adapter.addFragment(new TestFragment());
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return null;
    }
}

my_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</android.support.design.widget.CoordinatorLayout>

【问题讨论】:

    标签: android android-fragments tabs


    【解决方案1】:

    正如您在文档中看到的 setOffscreenPageLimit

    在你的函数 setupViewPager(ViewPager viewPager) 中添加:

    viewPager.setOffscreenPageLimit(limitNumberOfPages); //before setAdapter
    viewPager.setAdapter(adapter);
    

    limitNumberOfPages 是一个 int,包含在不重新加载片段的情况下可以滚动的页面数量。如果你有 4 个标签,你应该使用:

    int limitNumberOfPages = 3;
    

    此属性的默认数字是 1。

    【讨论】:

    • 这个答案帮助了我+1
    • 这对我有帮助。非常感谢
    • 嗨,它不适合我。在我的代码标签布局中。是这个问题吗?请建议我任何解决方案
    【解决方案2】:

    我自己解决了 简单,使用:

    viewPager.setOffscreenPageLimit(numberOfPages);
    

    从参考:设置应保留到处于空闲状态的视图层次结构中当前页面的任一侧的页面数。

    就我而言,我需要 3 个应该保留的页面。

    【讨论】:

      【解决方案3】:

      ViewPager 保存所选选项卡左侧和/或右侧的片段。 这是快速动画选项卡更改所必需的。

      您可以在您的 Activity 中保留对 Fragments 的引用,但此引用可以为空。

      【讨论】:

      • 我怎样才能保留我的片段的引用?然后我检查是否为空(并加载它)。
      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2020-01-23
      • 2015-12-05
      相关资源
      最近更新 更多