重新加载Fragment时,Fragment onCreate方法被调用多次

5
以下是我的代码:
public class MyListFragmentActivity extends FragmentActivity{

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("DEBUG : MLFA onCreate");
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragment())
            .replace(detailFragmentID, new MyDetailFragment()).commit();
        }
    }



     @Override
    protected void onRestart() {
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            Fragment prevFrag = getSupportFragmentManager().findFragmentById(detailFragmentID);
    if (prevFrag != null) {
        fragmentTransaction.remove(prevFrag);
        getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss();
    } else {
        getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss();
    }
}

MyListFragment

public class MyListFragment extends Fragment{

//When we click on each item in list view call detail fragment to relad its layout
OnItemClickListener onItemClickListener = new OnItemClickListener() {

/** Getting the fragmenttransaction object, which can be used to add, remove or replace a fragment */
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        /** Getting the existing detailed fragment object, if it already exists.
        *  The fragment object is retrieved by its tag name
        * */
        Fragment prevFrag = getFragmentManager().findFragmentById(detailFragmentID);

        /** Remove the existing detailed fragment object if it exists */
        if (prevFrag != null) {
            fragmentTransaction.remove(prevFrag);
           MyDetailFragment mydetailFragment = new MyDetailFragment();
            fragmentTransaction.replace(detailFragmentID, mydetailFragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.show(getFragmentManager().findFragmentById(detailFragmentID));
            fragmentTransaction.commit();
        }
}

MyDetailFragment

public class MyDetailFragment extends Fragment{

onCreate() // on create being called multiple times ? why ?????????????

onCreateView()

}

当我单击列表项时,MyDetailFragment的onCreate()仅被调用一次,但是当我将设备倾斜到纵向或横向时,MyDetailFragment的onCreate()会被多次调用?

为什么会这样?我在这里做错了什么,如何解决?

1个回答

0
每次更改方向,都相当于重新启动应用程序。您需要适当处理更改,例如释放资源、重新获取资源、停止任何正在进行的工作并恢复它们等等。

您没有做错任何事情。


如何解决我的问题?它只是调用MyDetailFragment的onCreate方法。 - Goofy
请查看生命周期并根据您的需求进行更改:http://developer.android.com/reference/android/app/Fragment.html#Lifecycle =) - An SO User
我正在按照生命周期中所示的方式进行操作,但为什么oncreate会一遍又一遍地被调用呢? - Goofy
你是否正在添加和删除片段? - An SO User
让我们在聊天中继续这个讨论 - Goofy
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接