gpt4 book ai didi

Android FragmentStatePagerAdapter 在重新加载中间 fragment 时返回空白屏幕

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:19 25 4
gpt4 key购买 nike

我正在尝试使用 FragmentStatePagerAdapter 和 ViewPager 制作一个包含 4 个标签的应用。

当我第一次运行该应用程序时,如果我按顺序(0 到 3)选择选项卡,一切正常,然后如果我尝试返回(3 到 0)选项卡 1 显示空白屏幕,如果,之后那,我选择选项卡 2,然后也是空白的,如果我转到选项卡 0 并再次执行此操作,选项卡 2 恢复正常,有时选项卡 1 恢复正常,但我没有找到任何顺序...

我知道这是一团糟...事情是选项卡 1 用于失败,选项卡 2 有时会失败,而选项卡 0 和 3 总是工作正常。如果我交换 fragment 的位置,一切都是一样的,有些我认为与 fragment 代码无关......

logcat 中没有显示任何错误,调试 fragment 显示一切都在按应有的方式进行......

我已经尝试修复它好几天了,但没有成功(很明显......),我试图覆盖 getItemPosition() 以返回 POSITION_NONE,我试图制作我自己的 FragmentStatePagerAdapter 就像这里说的 http://speakman.net.nz/blog/2014/02/20/a-bug-in-and-a-fix-for-the-way-fragmentstatepageradapter-handles-fragment-restoration/ 但是没什么……还有一些对我没用的东西。

一些代码:主类

 public class Main extends FragmentActivity implements ActionBar.TabListener {
private MyPageAdapter mPagerAdapter;
private ViewPager mPager;

@Override
protected void onCreate(Bundle si) {
super.onCreate(si);
setContentView(R.layout.activity_main);
init();
}

private void init() {
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

if (mPagerAdapter == null) {

mPagerAdapter = new PaginaAdapter(getSupportFragmentManager());

mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mPagerAdapter);
mPager.requestTransparentRegion(mPager);


mPager.setOnPageChangeListener(new viewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});

// Tab creation
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
View tabView = getLayoutInflater().inflate(R.layout.tab, null);
((ImageView) tabView.findViewById(R.id.tabIcon))
.setImageDrawable(getResources().getDrawable(mPagerAdapter.getIcon(i)));

actionBar.addTab(actionBar.newTab().setCustomView(tabView).setTabListener(this));
}

}

}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {

}

适配器

public class MyPageAdapter extends FragmentStatePagerAdapter {
public MyPageAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {

Fragment fragment = null;

switch (position) {
case 0:
fragment = new InitFragment();
break;
case 1:
fragment = new MusicFragment();
break;
case 2:
fragment = new VideoFragment();
break;
case 3:
fragment = new PicFragment();
break;
}

return fragment;
}

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

....

}

谢谢。

更新:我的 fragment 在不同的类中,它们不是静态的,这很重要吗?我刚刚意识到的另一件事是,它似乎在我触摸标签后破坏了 fragment ,因为如果我慢慢滑动我可以看到 fragment ,但突然一切都消失了

最佳答案

我建议您使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter。看起来你只想拥有 3 个 Tabs 和每个 Fragment,这听起来不太占用内存(只要它们不是充满 Bitmaps 等)。使用 FragmentStatePagerAdapter 时,您负责在重新加载时恢复每个 Fragment 的状态,使用 FragmentPagerAdapter 系统会保留 查看层次结构,这就是你想要的。

关于Android FragmentStatePagerAdapter 在重新加载中间 fragment 时返回空白屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23888853/

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