相关疑难解决方法(0)

片段已添加IllegalStateException

我在容器Activity上使用此方法来显示BFrag

public void showBFrag()
{
    // Start a new FragmentTransaction
    FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();

    if(mBFrag.isAdded())
    {
        Log.d(LOG_TAG, "Show() BFrag");
        fragmentTransaction.show(mBFrag);   
    }
    else
    {
        Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
        fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
    }

    // Keep the transaction in the back stack so it will be reversed when backbutton is pressed
    fragmentTransaction.addToBackStack(null);

    // Commit transaction
    fragmentTransaction.commit();        
}
Run Code Online (Sandbox Code Playgroud)

我从容器Activity中调用它; 首次:

  • 进入else语句,mBFrag替换为mAFrag.

然后我按下后退按钮:

  • 并且操作被反转(显示了mAFrag,但是..删除了mBFrag?).

然后我通过从同一个Activity调用showBFrag()再次前进:

  • 并且它获得了进入else语句的AGAIN.(所以我可以推断mBFrag没有添加)
  • 但我得到一个Fragment已经添加了IllegalStateException ...(那么为什么它没有进入if语句呢?)

所以:

  1. 为什么如果我已经添加了一个Fragment IllegalStateException,则isAdded()方法不会返回TRUE ?
  2. popBackStack操作是否完全删除以前添加的片段?
  3. 我误解了什么行为?

编辑:这是异常的完整信息.

06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment …
Run Code Online (Sandbox Code Playgroud)

android fragment illegalstateexception android-fragments android-3.0-honeycomb

55
推荐指数
3
解决办法
8万
查看次数

使用add()方法添加片段不会隐藏先前的片段

当使用add()方法添加新片段时,我遇到了"意外行为".

我想在FrameLayout上添加一个新片段,但是当我这样做时,前面的片段仍然可见.

  • 这是使用add()方法时的预期结果吗?

  • 这是因为我使用FrameLayout和add()方法只是在FrameLayout上放置一个片段而不影响前一个?

谢谢

android fragment android-fragments android-3.0-honeycomb

5
推荐指数
2
解决办法
1万
查看次数