gpt4 book ai didi

android - fragment addToBackStack 使应用程序崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:39 26 4
gpt4 key购买 nike

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

在 fragment Activity 子类中:

public void onCreate(Bundle savedInstanceState) {
...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.list_activity, listFragment, "venueListFragment");
ft.commit();
...
}

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

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();
}

这在第一个 fragment 之后工作正常,但是当我尝试点击第二个 fragment 中的项目时,我从内部 FragmentManager 类中得到这个错误:

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,下一个 fragment 可以正常加载,但因此我无法再向后导航。此外,如果我在单击下一个列表项之前只是等待 5-7 秒,应用程序不会崩溃,但 fragment 中的光标加载器完成加载的时间比这早,因为整个列表已经可见。在 onDestroyView 中,我无论如何都会显式调用 CursorLoader 的 cancelLoad() 方法。

关于如何解决这个问题有什么想法吗?这是 Android 兼容性库中的错误吗?

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

最佳答案

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

ft.commit();
getSupportFragmentManager().executePendingTransactions();

关于android - fragment addToBackStack 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981716/

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