0

我一直在尝试实现与联系人相关的某些功能。我有一个显示设备中所有联系人的片段。首先,当片段实例创建时,联系人将被获取并存储在 arraylist 中,然后将显示在 listview 中. 第一次获取时,加载联系人大约需要 3-5 秒,所以我放置了一个加载视图。有没有办法保存这个列表并保留它,以便第二次获取联系人列表更快。我正在替换按钮按下的片段..这是我的代码。

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()方法 and onsavedInstanceState(Bundle)onRetainSavedInstance()但是在我的情况下可以在这里使用它们吗?还需要使用这些addToBackStack()方法吗?..我还是个新手。有什么建议吗?

4

1 回答 1

0

当您替换 Fragment 时,您正在创建 Fragment 的新实例,然后 Fragment 以前的状态将永远不会恢复。

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

也许您可以使用 2 个容器,每个片段一个,而不是替换框架,而是显示和隐藏它们。如果这样做,您将可以获得片段的前一个实例。

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

于 2015-04-21T08:12:59.133 回答