我一直在尝试实现与联系人相关的某些功能。我有一个片段,显示设备中的所有联系人。首先创建片段实例时,将获取联系人并将其存储在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()
方法吗?..我'我还是个新手。有什么建议吗?
答案 0 :(得分:0)
当您替换Fragment时,您正在创建Fragment的新实例,然后片段以前的状态永远不会被恢复。
Utils.replaceFragment(getSupportFragmentManager(), R.id.container, new Fragment1());
也许你可以使用2个容器,每个片段一个,而不是替换片段,显示和隐藏它们。如果您这样做,您将可以获得片段的上一个实例。
http://developer.android.com/reference/android/app/FragmentManager.html#findFragmentById(int)