0

連絡先に関連する特定の機能を実現しようとしています.デバイス内のすべての連絡先を表示するフラグメントがあります.最初に、フラグメントインスタンスが作成されたときに、連絡先が取得され、配列リストに保存され、リストビューに表示されます. 初めて取得するとき、連絡先を読み込むのに約 3 ~ 5 秒かかるため、読み込みビューを配置しました。このリストを保存して保持し、2 回目の連絡先リストの取得を高速化する方法はありますか?ボタンを押したときにフラグメントを置き換えています..ここに私のコードがあります。

public static void replaceFragment(FragmentManager fm, int container, Fragment fragment) {
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(container, fragment);
    ft.commit();
}

アクティビティの で呼び出されonCreate()ます。

 Utils.replaceFragment(getSupportFragmentManager(), R.id.container, new Fragment1());

また、アクティビティでボタンを押すたびに、このメソッドを呼び出しています..

@Override
public void onClick(View v) {
    Typeface tf;
    switch (v.getId()) {
        case R.id.frag1_btn:
            Utils.replaceFragment(getSupportFragmentManager(), R.id.container, new Fragment1());
            break;

        case R.id.contact_btn:
            Utils.replaceFragment(getSupportFragmentManager(),
                        R.id.container, new ContactFragment());
            break;
    }
}

saveToBackStack()メソッド とonsavedInstanceState(Bundle)とについて検索しonRetainSavedInstance()ましたが、私の場合、ここで使用できますか? また、これらを使用するにはaddToBackStack()方法が必要ですか?..私はまだ初心者です.何か提案はありますか?

4

1 に答える 1

0

フラグメントを置き換えると、フラグメントの新しいインスタンスが作成され、フラグメントの以前の状態が復元されることはありません。

Utils.replaceFragment(getSupportFragmentManager(), R.id.container, new Fragment1());

おそらく、各フラグメントに 1 つずつ、2 つのコンテナーを使用して、frament を置き換える代わりに、それらを表示および非表示にすることができます。これを行うと、フラグメントの前のインスタンスを取得できます。

http://developer.android.com/reference/android/app/FragmentManager.html#findFragmentById(int)

于 2015-04-21T08:12:59.133 に答える