这是我的代码段:
我想先创建一个新的片段,但是如果该片段已经创建,那么我想显示前一个片段;

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

    @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()中还原片段,但是似乎您尚未保留片段。因此,它们与活动一起被销毁,并且当再次创建活动时,会创建新的片段。

关于android - 取回先前的 fragment ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22806356/

10-09 06:52