gpt4 book ai didi

android - 为什么 Fragment 的 onCreate() 有时会先于 Activity 的 onCreate() 被调用?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:58:33 26 4
gpt4 key购买 nike

最近我遇到了一个难以重现的问题。当 fragment 尝试使用来自 Activity 的数据初始化 ArrayAdapter 时,会发生 NPE。在Activity的onCreate方法中初始化的默认列表:

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
mAccounts = new ArrayList<>();
// ...
}

@Override
public List<Account> getAccounts(){
return mAccounts;
}

该 fragment 还在其 onCreate() 中创建了一个列表适配器:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);

//mAccountProvider is an interface implemented by the activity
mAccounts = mAccountProvider.getAccounts();

mAccountAdapter = new AccountAdapter(getActivity(), R.layout.account_list_item, mAccounts);
}

当调用默认 getCount() 方法时,NPE 发生在 AccountAdapter 内部。原因是 mAccounts 为空。该问题很少出现,我无法重现。

什么时候可以在 Activity 的 onCreate() 之前调用 fragment 的 onCreate()?根据源代码,Fragment 的onCreate() 是在Activity 的onCreate() 中调度的。为什么会在Activity的onCreate()执行完毕后调用呢?

最佳答案

Activities 回调不会在 Fragment 之后调用;在 Activity 期间调用 fragment 。

Activity.onCreate() 中调用 super.onCreate() 之前初始化 mAccounts

关于android - 为什么 Fragment 的 onCreate() 有时会先于 Activity 的 onCreate() 被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297978/

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