将Android片段保留在Backstack中

时间:2015-12-05 11:53:28

标签: android android-fragments

我正在处理android片段,我无法将片段保留在backstack中,即当我按下后退按钮时,它会将我推出Activity,它会启动片段,我想在backpress上回到之前的片段。

到目前为止,我已经尝试了这个但是我无法将碎片保留在后台堆中。

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

2 个答案:

答案 0 :(得分:6)

在调用commit()提交事务之前,您应该像在提供的代码中一样将片段添加到backstack addToBackStack(null)

然后覆盖onBackPressed()以从堆栈

弹出片段

您面临的问题是,您使用FragmentManager

进行交易
getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

但你在onBackPressed()中使用SupportFragmentManager

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
        getSupportFragmentManager().popBackStack();         
    }
}

要解决您的问题,您必须知道您的片段类型与您的匹配(在您的情况下为searchResultsFragment)我的意思是,如果它扩展片段或支持片段

如果您扩展片段支持

import android.support.v4.app.Fragment;

您应该在事务和onBackPressed

中使用getSupportFragmentManager()

如果您使用片段

import android.app.Fragment;

您应该在事务和onBackPressed

中使用getFragmentManager()

答案 1 :(得分:3)

您必须在活动中覆盖onBackPressed。仅将片段添加到后台堆栈是不够的。

@Override
public void onBackPressed() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    if(fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}
相关问题