私が直面しているシナリオは、私のアプリケーションでは、シングルペインとデュアルペインスタイルのレイアウトです。画面間で可能なナビゲーション操作を個別に処理するのではなく、レイアウトのスタイルごとに、目的の画面が表示されたときにレイアウトを正しく設定する機能を使用しています。
これは基本的にアプリの各画面のステートメントであり、各レイアウトスタイルを処理するために各画面にswitch
ネストされたステートメントがあります。switch
これは私がコードで話していることです:
protected void setupScreen() {
switch(currentScreen) {
case SCREEN_ONE:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break;
case SCREEN_TWO:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break
// ... etc ....
}
}
画面を設定するためのアクションを実行したいセクションでは、これは次の基本的な3つの操作で構成されています。
// Create the fragments if necessary
if (screenFragment == null) {
screenFragment = new myFragment();
}
// Remove the existing fragments from the layout views
// HOW???
// Add the fragments for this screen to the view
getSupportFragmentManager().beginTransaction().add(pane1.getId(), myFragment, "myFragment").commit();
ご覧のとおり、私が苦労しているのは、2番目のステップの実行方法です。削除したいものを正確に知らずに、特定のからすべてを削除するにはどうすればよいですか?私が見つけた最も近いものは、すべての場合にこれを正常に実行することですが、それが判明した場合は、を同じフラグメントに置き換えています。この場合、すべてを削除してから追加するわけではなく(ドキュメントが示唆しているように)、削除するように見えます。これは互換性ライブラリの使用に関する問題ですか、それとも使用すべき方法ではありませんか?Fragment
View
FragmentTransaction.replace()
Fragment
FragmentTransaction.replace()
いずれにせよ、どうすればこれを行うことができますか?すべてのフラグメントを調べてデタッチする関数をコーディングする必要がありますか、それとも「ツーインワンremoveAllFragments()
」関数が主張することの前半を実行する方法はありFragmentTransaction.replace()
ますか?