3

リストビューを表示するフラグメント XYZFragment があります。リストビュー項目をクリックして、このようにフラグメントを置き換えます。

Fragment fragment=new XYZFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft= fragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.replace(R.id.content_frame, fragment).commit();

しかし、私の問題は、戻るボタンをクリックすると、フラグメントがリストビューをリロードすることです.Activityを使用していたときには決して起こりません。だから私の質問は、データのリロードを防ぐために前のフラグメントのインスタンスを保存する方法です。

4

1 に答える 1

2

あなたのコードを見なければ私たちはあなたを助けることはできませんが、あなたの質問から私は問題を理解することができます.この解決策はあなたを助けるかもしれません.

そのようなスタックを作成します

private static Stack<Fragment> myFragStack;
myFragStack = new Stack<Fragment>();

//フラグメントをロードする

public void loadFragment(Fragment fragment){
 FragmentManager fm = getSupportFragmentManager();
 FragmentTransaction ft = fm.beginTransaction();
 myFragStack.lastElement().onPause();
 ft.hide(myFragStack.lastElement());
 myFragStack.push(fragment);
}

//onBackPressed

public void onBackPressed() {
 FragmentManager fm = getSupportFragmentManager();
 FragmentTransaction ft = fm.beginTransaction();

 if (myFragStack.size() > 1) {
    ft.remove(myFragStack.pop());
    myFragStack.lastElement().onResume();
    ft.show(myFragStack.lastElement());
    ft.commit();
 }
}

これはサンプル コードです。必要に応じて変更できます。ft.replace() はビューを完全に削除し、コンテキストを失うため、リストの状態を維持できませんが、hide-show でフラグメントを維持するスタックを使用すると問題が解決します。

于 2014-05-06T06:48:14.087 に答える