java - 为什么在隐藏 fragment 时有时会得到堆栈跟踪?

标签 java android android-fragments android-fragmentactivity

我有一个具有内部 fragment 的 fragment 。

public void hideInnerFragment(String fr_tag) {  
  FragmentTransaction childTransaction = getChildFragmentManager().beginTransaction();  
  MyInnerFragment inner = (MyInnerFragment)   getChildFragmentManager().findFragmentByTag(fr_tag);  
  if(inner != null) {  
      childTransaction.hide(inner);  
      childTransaction.commit();  
    }  
}  

工作正常。 但我有时在日志中看到如下堆栈跟踪:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1377)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1395)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:637)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:616)
at com.test.MyParentFragment.hideInnerFragment   

为什么我得到这个?我还没有弄清楚什么时候会发生这种情况。

更新:
以防万一它有帮助/重要:
创建 fragment 后,我启动一个异步任务来执行长时间运行的操作,并根据结果调用内部 fragment 的隐藏。

最佳答案

我猜您是从异步任务或调用 onPause() 之后调用的方法调用方法“hideInnerFragment”。

我在上一个应用程序中遇到了类似的问题,我通过在主机 Activity 中使用公共(public)静态 boolean 值解决了这个问题。

public HostActivity extends Activity(){
     public static boolean visible = false; // set it to false; 

 public void onResume(){
     visible = true;
 }

 public void onPause(){
     visible = false;
 }

}

然后在你的 fragment 中

public void hideInnerFragment(String fr_tag) 
{ 
  if(HostActivity.visible)
  { 
      FragmentTransaction childTransaction = getChildFragmentManager().beginTransaction();  
      MyInnerFragment inner = (MyInnerFragment)   getChildFragmentManager().findFragmentByTag(fr_tag);  
      if(inner != null) {  
       childTransaction.hide(inner);  
       childTransaction.commit();  
     }  
}

关于java - 为什么在隐藏 fragment 时有时会得到堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873540/

相关文章:

java - 为什么 Collections 中的方法没有放在 AbstractCollection 中?

android - Mac、Android Studio、Emulator、SQLite 数据库——实际找到目录?

android - 我如何获得 Activity 而不是 FragmentActivty?

android - RecyclerView 查看项目

android - 可以下载到内部存储器吗?

android - 在 onCreateView 与 onActivityCreated 的 fragment 中检索 Activity 范围的 ViewModel

android - fragment布局不能引用?

java - Gradle 排除依赖关系极其困惑

java - 大型数组的快速排序 stackoverflow 错误

java - 如何保留调试参数名称?