我有无UI片段portfolioArrayFragment
,setRetainInstance(true)
然而,在非常罕见的情况下,它有时会在onResume
中变为空。我从Google Developer Console获得了一次崩溃报告。我曾尝试过多种方法来重现崩溃,但却无法实现。
onCreate
和onResume
。onResume
将被触发。onCreate
和onResume
。即使在portfolioArrayFragment
期间我仍然无法获得空onResume
。知道为什么会出现这种情况吗?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FragmentManager fm = this.getFragmentManager();
this.portfolioArrayFragment = (PortfolioArrayFragment)fm.findFragmentByTag(PORTFOLIO_ARRAY_FRAGMENT);
if (this.portfolioArrayFragment == null) {
this.portfolioArrayFragment = PortfolioArrayFragment.newInstance();
fm.beginTransaction().add(this.portfolioArrayFragment, PORTFOLIO_ARRAY_FRAGMENT).commitAllowingStateLoss();
} else {
}
}
@Override
public void onResume() {
super.onResume();
// SOMETIMES, this.portfolioArrayFragment IS NULL AND I HAVE NO IDEA WHY?!
if (this.portfolioArrayFragment.buyArray == null) {
// Prepare the loader. Either re-connect with an existing one,
// or start a new one.
getLoaderManager().initLoader(0, null, getBuyArrayLoaderCallbacks());
}
}
答案 0 :(得分:0)
您必须从 onCreate 方法中删除所有代码并将其添加到 onResume ,因为每次首次加载应用程序/活动或恢复应用程序/活动时都会调用onResume方法。
答案 1 :(得分:0)
您正在
中添加新片段fm.beginTransaction().add(this.portfolioArrayFragment, PORTFOLIO_ARRAY_FRAGMENT).commitAllowingStateLoss();
<强> From android documentation 强>
提交不会立即发生;它将被安排为工作 在下一次线程就绪时要完成的主线程上。
因此,如果您的片段事务仍处于未决状态,您将在onResume()中获取NULL,您可以做的是在提交事务之后但在通过标记查找之前尝试运行fragmentManager.executePendingTransactions(),看看它是否适合您。