片段在同一个Activity中切换会重新启动相同的片段

时间:2016-09-02 07:25:58

标签: android android-fragments

我正在申请一份申请 在某个地方我想在Activity中加载Fragment,当在 FirstFragment 上点击Gridview / Listview项时,我加载 SecondFragment

我已经按照以下方式添加了碎片:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.form_creation_view);

    Fragment fragment = new FirstFragment();
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.form_view, fragment).commit();

}

第二片段:

Fragment fragment = new SecondFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.form_view, fragment).commit();

MainActivity.java的OnBackPress

@Override
public void onBackPressed() {
    if(getFragmentManager().getBackStackEntryCount() == 0) {
        super.onBackPressed();
    } else {
        getFragmentManager().popBackStack();
    }
}

因此,当我在加载SecondFragment时在Mainactivity上按BackButton时,它会切换到FirstFragment,但它会再次调用FirstFragment的onCreateView()方法。

FirstFragment里面有一个Recyclerview,我以OnCreateView()方法向服务器发送API请求,以便将数据加载到此Recyclerview中。

现在当我从SecondFragment再次回到此片段时,我想要它,以便不应该执行请求,并且数据应该填充到RecyclerView中。

我怎样才能做到这一点?
有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

在你的onCreateView中,你应该做这样的检查:

    if(mList.size() == 0){
        //make api call
    }else{
        //set recyclerView adapter
    }

这样,当你从SecondFragment回来时,你可以重新填充RecyclerView。

您还应该考虑在onSaveInstanceState上保存此列表