0

FrameLayoutでホルダーアクティビティを使用します。

そこにリストビューのあるフラグメントを置きました。正常に動作します。

ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, feedFragment);
ft.commit();

次に、別のフラグメントを追加します。

android.support.v4.app.Fragment targetFragment = new MainPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();

ここでは、replace()の代わりにadd()を使用して、キーを押したときにリストビューの前の位置に戻ります。正常に動作します。

ただし、2番目のフラグメントから3番目のフラグメントに移動することは可能です。

android.support.v4.app.Fragment targetFragment = new FullPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();

ここでは、replaceを使用して、キーを押したときに2番目のフラグメントを強制的にリロードします。

3番目のフラグメントのバックキーが正常に機能する場合があります。表示時にリロードされている2番目のフラグメントが表示されます。

しかし、時々(この手順を試したときに初めて発生することがわかります)、3番目のフラグメントからキーを押し戻すと、最初のフラグメントに移動し、予想に反して2番目のフラグメントを閉じます。そして、最初のフラグメントはリロードです。

この奇妙な振る舞いを防ぐ方法は?

4

1 に答える 1

1

add()メソッドは、フラグメントをコンテナーに追加し、コンテナーに追加された他のフラグメントは、最初のフラグメントのキューに戻されます。最初のフラグメントが非表示になるまで、それらは表示されません。これがあなたが直面している問題であることを願っています。最初の->2番目のフラグメントナビゲーションにもreplace()を使用するとよいでしょう。

于 2013-01-05T09:48:35.310 に答える