2013-06-26 12 views
5

onDestroy()のonCreate()とFragmentTransaction.remove()でFragmentTransaction.add()を呼び出すはずです。このエラーとonDestroyで私のアプリがクラッシュ():Android:いつFragmentTransaction.removeを使用するのが適切ですか?

06-26 15:25:50.213: E/AndroidRuntime(579): java.lang.RuntimeException: Unable to destroy activity {com.myapp/com.myapp.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed 

ない場合、私は(のonCreate/onDestroyでこれらの事を呼んでください)?

+3

フラグメントのフレームワークによって管理されているアクティビティが破棄されたときに、フラグメントを手動で破棄する必要はありません。 – CommonsWare

+0

OK。私は解決策をオンラインで探している間にそれを読んだ。私の問題は、水平ビューに切り替えてから垂直ビューに戻ったときに、入れ子になったフラグメントの少なくとも1つに対して重複したレイアウトが作成されていることです。このフラグメントのレイアウトはsetTextから更新されず、setTextから更新を取得するレイアウトの直下にもあります。 – KairisCharm

答えて

3

My problem with that is that when I switch to my horizontal view, and then back to my vertical view, I now have a duplicate layout for at least one of the nested fragments.

私の推測では、あなたが常にonCreate()にフラグメントを追加しているためであるということです。 Androidは構成の変更によってフラグメントを自動的に再作成します。

代わりに使用したのを除いて、あなたのソリューションが働いて、[OK]を
@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) { 
     getSupportFragmentManager().beginTransaction() 
           .add(android.R.id.content, 
             new RotationFragment()).commit(); 
    } 
    } 
+0

あなたはおそらく正しいでしょう。しかし、私が行うとき if(getChildFragmentManager()。findFragmentByTag( "MyFrag")== null) 私はいつも真の復帰を得る。 – KairisCharm

2

if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) 

私が使用:

if (savedInstanceState==null) 
をしたがって、 onCreate()は、フラグメントはすでにそれを追加する前に存在しているかどうかを確認する必要があります

フラグメントマネージャは、onCreate関数によって設定されていないようです。しかし、あなたの答えはほとんど正しいので、私は答えとしてそれをマークしています。

もう一度お返事ありがとうございます。これは、あなたが私に大きな助けをしてくれた2回目のことです。本当に感謝しています。

関連する問題