gpt4 book ai didi

android - 未添加 fragment (不一致的崩溃)

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:59 27 4
gpt4 key购买 nike

在我的 MainActivity 中,我有:

@Override
protected void onResume() {
super.onResume();

checkForCrashes();
checkForTutorial();
checkForUpdates();
setStore();
setup();
}

setup() 中,我在回调中调用了 initializeTabs():

protected void setup() {
final Store s = getStore();
setBackground();

if (s == null) {
unauthorizedHandler();
return;
}
final Context mainActivity = this;
fragments = getTabFragments();

StoresController.getStoreDetails(s, mainActivity, new Callback<StoreDetailDecorator>() {
@Override
public void success(StoreDetailDecorator storeDetailDecorator, Response response) {
s.prettyName = storeDetailDecorator.store.pretty_name;
s.save();
Log.v(TAG, s.prettyName);
TextView toolbar_label = (TextView)findViewById(R.id.toolbar_label);
toolbar_label.setText(MainActivity.getTruncatedMenuName(s.name()));

SummaryTab t1 = (SummaryTab)fragments.get(0);
t1.notifier = (SummaryTabLoadingNotifier)mainActivity;
initializeTabs(s, fragments);
t1.populateReport();
}
}
}

public void initializeTabs(Store s, List<Fragment> fragments ) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), getTabTitles(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setOffscreenPageLimit(2);
pager.setAdapter(adapter);
}

最后一行对一些客户来说是崩溃的。

java.lang.IllegalStateException: Fragment InfoTab{1bcb80f} is not currently in the FragmentManager

但不是每次都这样。为什么有时会出现这种情况?与未连接的 fragment 有关?我阅读了一些有关检查 fragment 的 isAdded() 的内容,但那是为了检查 fragment 是否已添加到 Activity。我正在使用 FragmentStatePagerAdapter :

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private CharSequence[] titles;
private List<Fragment> fragmentList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager fragmentManager, CharSequence titles[], List<Fragment> fragmentList) {
super(fragmentManager);
this.titles = titles;
this.fragmentList = fragmentList;
}

@Override
public android.support.v4.app.Fragment getItem(int position) {
return fragmentList.get(position);
}

@Override
public CharSequence getPageTitle(int position) { return titles[position]; }

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

@Override
public Parcelable saveState() {
return null;
}
}

saveState(){ return null;} 可以吗?据我了解,这是为了确保每次都刷新 View 。

最佳答案

onResume() 每次您的 Activity 返回前台时都会被调用。

例如,如果您的某个用户按下主页按钮并返回到您的应用程序,则将再次调用 getStoreDetails() 并且您将创建一个新的适配器(使用相同的旧 fragment 列表)当结果到达时。

你应该实例化你的 fragment ,创建一个适配器并只用适配器填充你的 viewpager 一次(onCreate() 就是那个地方)。

当新数据从 getStoreDetails() 到达时,只需使用新数据更新已添加的 fragment 。

关于android - 未添加 fragment (不一致的崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42192785/

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