フラグメントを使用してメニュー ナビゲーションを実装しています。そのため、ホームから始めて、ユーザーはさまざまなセクションと各セクションの詳細に移動できます。
ユーザーがセクションを変更すると、ホームに到達するまで fragmentmanager バックスタックで pop を呼び出し、新しいセクションをロードします。
これはすべて期待どおりに機能しています。しかし、私はこの問題を抱えています:
- onResume() で setHasOptionsMenu(true) を呼び出すセクションをロードします
- 別のセクションをロードします (スタックから出るはずの古いセクション)。わかりました。メニューは表示されません
- アプリケーションを離れて (たとえば、Android Launcher アクティビティに移動)、戻ったときに正しいセクションが表示されますが、古いフラグメントのメニューが表示されています。
バックスタックを反復して各フラグメントを印刷しましたが、メニューのあるフラグメントではありません。
onResume() メソッド (setHasOptionsMenu(true)
フラグが立てられている場所) にデバッグ マークを付けると、実際にここに入るので、フラグメントはまだどこかにあります。
何か間違ったことをしているのか、どうすれば解決できるのか知りたいのですが、thx
アップデート:
このコードを使用して新しいフラグメントをロードしています
fm.beginTransaction()
.add(container, sectionFragment.getFragment())
.addToBackStack(sectionFragment.getFragmentName())
.commit();
そして削除のために:
private void clearStack(){
int count = fm.getBackStackEntryCount();
while(count > 1){
fm.popBackStack();
count--;
}
}
注 1:詳細セクションから戻るときにフラグメントの状態を失いたくないため、置換の代わりに追加を使用しています。別の別のセクションをロードするときは、clearStack を呼び出してスタックを 1 までポップしてから、新しいフラグメントをロードします。最後に、executePendingTransactions() を呼び出してトランザクションからフラグメントを削除します。
注 2:フラグメントの onDestroy() メソッドに入っていることがわかっているので、破棄されると思われます。しかし、メイン アクティビティが再開されたときに再度呼び出される理由がわかりません。