gpt4 book ai didi

android - FragmentPagerAdapter getItem 没有被触发

转载 作者:IT王子 更新时间:2023-10-29 00:07:37 24 4
gpt4 key购买 nike

目前,通过 FragmentActivity,我使用以下代码在 2 种类型的 Fragment 之间切换。

private void toggle() {
Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content);
Fragment fragment = null;
if (oldFragment instanceof ColorFragment) {
fragment = new ViewPagerFragment();
} else {
fragment = new ColorFragment(android.R.color.black);
}

getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss();
}

正在切换 2 个 fragment 。

  • ColorFragment - 一个简单的 fragment ,用纯黑色填充其背景。
  • ViewPagerFragment - fragment 包含 ViewPager。用户可以在紫色 fragment 和蓝色 fragment 之间滑动。

负责刷紫色和蓝色 fragment 的代码如下。

private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {

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

@Override
public int getCount() {
return 2;
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ColorFragment(android.R.color.holo_purple);
default:
return new ColorFragment(android.R.color.holo_blue_bright);
}
}
}

但是,我在切换过程中遇到了奇怪的行为。

  1. 显示黑色 fragment 。
  2. 切换。
  3. 查看分页器,可以在显示的紫色和蓝色 fragment 之间滑动。
  4. 切换。
  5. 显示黑色 fragment 。
  6. 切换。
  7. 没有显示,因为 MyFragmentPagerAdapter 的 getItem 没有被触发。

我觉得我的情况类似于FragmentPagerAdapter getItem is not called

但是,我不喜欢使用 FragmentStatePagerAdapter,因为在页面之间切换时可能会产生更多开销。

有什么办法可以解决这个问题吗?

我提供了一个完整的可用源代码来演示这个问题:https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip

最佳答案

Any workaround to overcome this problem?

我已经下载了您的代码,但出现问题是因为您没有正确处理那些 Fragments。最准确地说,您在基于 ViewPagerFragment 中使用嵌套的 Fragments 并为该 ViewPager 创建适配器,如下所示:

MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getFragmentManager());

相反,您应该使用 getChildFragmentManager() 来绑定(bind)嵌套 fragment :

MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getChildFragmentManager());

此外,您不应通过构造函数将数据传递给 Fragment,因为该数据将无法在配置更改后继续存在,并且会开始出现不良情况。请改用 Bundle

关于android - FragmentPagerAdapter getItem 没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15588120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com