Android 碎片不会再次打开
我有一个导航抽屉,上面有菜单主页、设置、关于我们等。只有HOME才有刷卡标签。在应用程序开始时,Home被打开,但之后每当我再次单击Home时,它会显示错误,表示Home片段未连接到Activity 我的代码如下 Drawer.java 这是主要的 代码在第72行 myActionBar.setNavigationMode(ActionBar.NAVIGATION\u MODE\u选项卡) 代码在第114行 int tabId=getActivity().getResources().getIdentifier(名称,“drawable”,getActivity().getPackageName())Android 碎片不会再次打开,android,android-fragments,Android,Android Fragments,我有一个导航抽屉,上面有菜单主页、设置、关于我们等。只有HOME才有刷卡标签。在应用程序开始时,Home被打开,但之后每当我再次单击Home时,它会显示错误,表示Home片段未连接到Activity 我的代码如下 Drawer.java 这是主要的 代码在第72行 myActionBar.setNavigationMode(ActionBar.NAVIGATION\u MODE\u选项卡) 代码在第114行 int tabId=getActivity().getResources().getId
不太清楚,看不到完整的活动代码,但当片段代码运行时,您的活动可能仍在执行某些(后台)过程或其他操作。尝试将代码移动到片段生命周期中的
onActivityCreated()
,此时片段已附加到活动。还可以检查代码中是否已经添加了片段,如
if(!isAdded()) {
return;
}
通过此方法删除当前片段可能会解决您的问题
public void removeFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(fragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.commit();
}
我在OnActivityCreated中编写了代码,但仍然存在相同的问题。但在同一行中仍然显示相同的错误。我想知道为什么在myActionBar.setNavigationMode(ActionBar.NAVIGATION\u MODE\u选项卡)中显示错误;我应该在哪里使用isAdded代码?我在Drawer.java中使用了它,但Odest Work通过避免getResource().getIdentifier()行解决了这个问题。我不知道为什么它会引起问题。你能提供一些这方面的信息吗?
05-29 14:44:31.961 12034-12034/com.example.p6.bloodies E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment Home{4120fd50} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:619)
at com.example.p6.bloodies.Home.onTabSelected(Home.java:114)
at android.support.v7.internal.app.WindowDecorActionBar.selectTab(WindowDecorActionBar.java:634)
at android.support.v7.internal.app.WindowDecorActionBar.setSelectedNavigationItem(WindowDecorActionBar.java:414)
at android.support.v7.internal.app.WindowDecorActionBar.setNavigationMode(WindowDecorActionBar.java:1297)
at com.example.p6.bloodies.Home.onCreateView(Home.java:72)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)
if(!isAdded()) {
return;
}
public void removeFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(fragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.commit();
}