【问题标题】:How does TabLayout work?标签布局如何工作?
【发布时间】:2016-12-03 11:56:50
【问题描述】:

我的MainActivity 中有一个Tablayout 和一个显示三个片段的Viewpager。

当应用启动时,会发生这种情况:

onCreate Fragment 1
onCreate Fragment 1
onActivityCreated Fragment 1
onResume Fragment 1
onActivityCreated Fragment 2
onResume Fragment 2

点击第二个标签时会发生这种情况:

onCreate Fragment 1
onActivityCreated Fragment 3
onResume Fragment 3

点击第三个标签:

onSaveInstanceState Fragment 1

从第三个标签点击第二个标签:

onCreate Fragment 1
onActivityCreated Fragment 1
onResume Fragment 1

代码

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

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

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

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

@Override
public CharSequence getPageTitle(int position) {
    return mFragmentTitleList.get(position);
}

public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}
}

在主活动中

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

    tabLayout = (TabLayout) findViewById(R.id.tablayout);
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(DishFragment.newInstance(1), "Кулинария");
    adapter.addFragment(DishFragment.newInstance(2), "Кондитерская");
    adapter.addFragment(DishFragment.newInstance(3), "Хлебобулочная");
    viewPager.setAdapter(adapter);
}

onCreate 片段 1 onCreate 片段 1 onActivityCreated 片段 1 onResume 片段 1 onActivityCreated 片段 2 onResume 片段 2 onCreate 片段 1 onActivityCreated 片段 3 onResume 片段 3 onSaveInstanceState 片段 1 onCreate 片段 1 onActivityCreated 片段 1 onResume 片段 1

【问题讨论】:

  • ViewPager 默认加载当前的 Fragment 和相邻的 Fragment。不过,我不确定这是否是您要问的问题

标签: android android-viewpager android-tabs


【解决方案1】:

ViewPager 将相邻的 Fragment 保存在内存中,以便在页面之间快速转换。我认为重新创建的 Fragments 有一个修复程序(因为您将它们存储在一个列表中,所以不要多次自己创建它们)。

当应用启动时,会发生此过程:

我不确定加倍的 onCreate #1,但 Fragment 1 和 2 已启动

onCreate Fragment 1
onCreate Fragment 1
onActivityCreated Fragment 1
onResume Fragment 1
onActivityCreated Fragment 2
onResume Fragment 2

在第二次点击时会发生这种情况:

Fragment 1 & 2 已经创建,但 Fragment 3 现在已经创建

onCreate Fragment 1
onActivityCreated Fragment 3
onResume Fragment 3

第三次点击:

操作系统不再需要保留 Fragment 1

onSaveInstanceState Fragment 1

从第三次点击第二次点击:

片段 1 被创建/恢复

onCreate Fragment 1
onActivityCreated Fragment 1
onResume Fragment 1

【讨论】:

  • 好的,我明白了!但我发现了另一个误解。我对所有三个选项卡使用一个片段类。似乎下一个片段的项目正在添加到以前的项目之上。虽然我创建了片段的三个不同实例。是xml问题吗?也许有必要清除它?
  • 您只有 3 个adapter.addFragment。我不确定你在问什么
  • 问题自行解决了。我什么都没意识到adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(DishFragment.newInstance(1), "Кулинария"); adapter.addFragment(DishFragment.newInstance(2), "Кондитерская"); adapter.addFragment(DishFragment.newInstance(3), "Хлебобулочная"); viewPager.setAdapter(adapter);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多