Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 取回上一个片段_Android_Android Fragments_Fragment - Fatal编程技术网

Android 取回上一个片段

Android 取回上一个片段,android,android-fragments,fragment,Android,Android Fragments,Fragment,以下是我的代码片段: 我最初想创建一个新片段,但是如果片段已经创建,我想显示前面的片段 但每次一个新片段被初始化时 @Override protected void onCreate(Bundle savedInstanceState) { . . showFragment(FRAGMENT_ADD_DETAILS); } @Override public boolean onOptionsItemSelected(MenuItem item) {

以下是我的代码片段: 我最初想创建一个新片段,但是如果片段已经创建,我想显示前面的片段

但每次一个新片段被初始化时

    @Override
protected void onCreate(Bundle savedInstanceState) {
     .
     .
    showFragment(FRAGMENT_ADD_DETAILS);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            if(currentFragment==FRAGMENT_ADD_DETAILS){
                finish();
            }else{
                showFragment(FRAGMENT_ADD_DETAILS);
            }
            break;
        case R.id.menu_action_next:
            showFragment(FRAGMENT_INVITE_FRIENDS);
            break;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
     .
     .
    return true;
}


private void showFragment(int fragmentType) {
    Log.d(TAG,"showFragment : "+fragmentType);
    FragmentManager fragmentManager = getFragmentManager();
    Fragment prevFragment = fragmentManager.findFragmentByTag(String.valueOf(fragmentType));
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    if (prevFragment == null) { //create a fresh instance of fragment
        Log.d(TAG,"Initialize new fragment");
        Fragment newFragment;
        if (fragmentType == FRAGMENT_ADD_DETAILS) {
            newFragment = new NewDetailsFragment();
        } else {
            newFragment = new NewInviteFragment();
        }
        fragmentTransaction.replace(R.id.ant_container_layout, newFragment);
        fragmentTransaction.addToBackStack(String.valueOf(fragmentType));
    } else {//just reuse the previous fragment
        Log.d(TAG,"Re-Using previous fragment");
        fragmentTransaction.replace(R.id.ant_container_layout, prevFragment);
    }
    fragmentTransaction.commit();
}

请帮忙

您从未向片段中添加任何标记,因此无法使用
findFragmentByTag()
找到它们

替换片段时,而不是

fragmentTransaction.replace(R.id.ant_container_layout, newFragment);
使用接受标记的重载方法:

fragmentTransaction.replace(R.id.ant_container_layout, newFragment, String.valueOf(fragmentType));


您尝试在活动的
onCreate()
中还原片段,但似乎没有保留片段。因此,它们将与活动一起销毁,当再次创建活动时,将创建新的片段。

也许您需要发布更多代码。。。但是你肯定需要添加标签,因为你无法通过标签找到任何东西。从你发布的内容来看,调用此方法时很难说片段是否仍然存在。你从哪里打电话来的?看我的更新。我很难说出你到底需要做什么,因为这取决于你的具体需要。阅读更多关于片段生命周期、分离/附加片段等的信息。