首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fragment addToBackStack应用程序崩溃

Fragment addToBackStack应用程序崩溃
EN

Stack Overflow用户
提问于 2012-04-03 02:24:24
回答 1查看 2.4K关注 0票数 2

我有一个FragmentActivity,它在启动时加载一个自定义ListFragment,并在单击一个项目后用一个新的片段替换它。

在片段活动子类中:

代码语言:javascript
复制
public void onCreate(Bundle savedInstanceState) {
        ...
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.list_activity, listFragment, "venueListFragment");
        ft.commit();
        ...
}

在ListFragment子类的列表项处理程序中:

代码语言:javascript
复制
public void onListItemClick(ListView l, View v, int position, long id) {

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    VenueListFragment newFragment = VenueListFragment.newInstance(nextListType, nextRowID);

    ft.replace(R.id.list_activity, newFragment, "venueListFragment");
        ft.addToBackStack(null);                
    ft.commit();
}

这在第一个片段之后工作得很好,但是当我尝试单击第二个片段中的项时,我从内部FragmentManager类中得到了这个错误:

代码语言:javascript
复制
04-03 01:04:24.999: E/AndroidRuntime(15016): FATAL EXCEPTION: main
04-03 01:04:24.999: E/AndroidRuntime(15016): java.lang.NullPointerException
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.support.v4.app.LoaderManagerImpl.hasRunningLoaders(LoaderManager.java:824)
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
04-03 01:04:24.999: E/AndroidRuntime(15016):    at android.os.Handler.handleCallback(Handler.java:587)

我注意到如果我注释掉了addToBackStack,下一个片段就可以正常加载了,但结果是我不能再向后导航了。此外,如果我只是简单地等待5-7秒,然后点击下一个列表项,应用程序不会崩溃,但片段中的光标加载程序完成加载的时间要早于此,因为整个列表已经可见。在onDestroyView中,我显式地调用了CursorLoader的cancelLoad()方法。

对如何解决这个问题有什么想法吗?这是Android兼容库中的一个bug吗?

我使用的是ACL的最新版本(版本7),并且将最小SDK设置为API级别7 (2.1)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-03 03:21:56

在你做完commit()之后,试试executePendingTransactions()commit()是一个异步进程,因此可能不会像您预期的那样立即执行。

代码语言:javascript
复制
ft.commit();
getSupportFragmentManager().executePendingTransactions();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9981716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档