我正在处理android片段,我无法将片段保留在backstack中,即当我按下后退按钮时,它会将我推出Activity,它会启动片段,我想在backpress上回到之前的片段。
到目前为止,我已经尝试了这个但是我无法将碎片保留在后台堆中。
getActivity().getFragmentManager().beginTransaction()
.replace(R.id.mainContainer, searchResultsFragment)
.addToBackStack(null)
.commit();
答案 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();
}
}