Android保留跨片段的信息

时间:2016-10-05 18:37:58

标签: android

我有五个片段,用户可以在它们之间切换。其中一个片段从服务器加载用户列表以填充片段上的UI列表。如果用户滑动到不同的片段,然后刷回原始列表,我需要列表信息保持不变。每次用户离开片段并返回时,我都不希望片段重新加载用户。

我正在查看setRetainInsance(true),并想知道这是否是可能的解决方案?片段保留信息的最佳方式是什么,而不是每次都从头开始创建。

我用它来切换fragements -getSupportFragmentManager()。beginTransaction()。replace(R.id.searchLayout,ratingFragment).commit();

2 个答案:

答案 0 :(得分:0)

通过将片段添加到Backstack来替换片段。

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.addToBackStack(tag);
    fragmentTransaction.replace(container, fragment, tag);
    fragmentTransaction.commit();

同时创建View对象,如果它不为null,则返回它。

    private void View view ; 
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
          if (view != null)
              return view;
          view = inflater.inflate(R.layout.fragment_browse_recipe, container, false);
     //initialize layout views
     return view;
    }

答案 1 :(得分:0)

片段就像任何其他物体一样。  在Fragment事务中,Fragment不调用OnCreate()方法而是从onCreateView开始,因此,加载用户并将其保存为实例变量并将其分配给onCreate()

实施例

class MyFragment extends Fragment{


List<users> userList;

void onCreate(){
   userList = getUserList();}
//the list is loaded during Oncreate();

现在想象你已经取代了片段

现在根据Andorid Framework,onCreate()不再被调用 而是调用onCreateView()

void onCreateView(){
//you can check whether instance Variable is initialised or not
if(userList != null) { 


listview.setAdapter(new Myadapter(this,userList);