在片段android中保存数据

时间:2015-04-21 07:50:25

标签: android android-fragments fragmenttransaction android-savedstate

我一直在尝试实现与联系人相关的某些功能。我有一个片段,显示设备中的所有联系人。首先创建片段实例时,将获取联系人并将其存储在arraylist中,然后将显示在列表视图中。第一次抓取时,加载联系人大约需要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()方法以及onsavedInstanceState(Bundle)onRetainSavedInstance(),但是我可以在这里使用它们吗?使用这些方法还需要addToBackStack()方法吗?..我'我还是个新手。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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