Android 在popbackstack之后获取空片段
当我按下后退按钮时,得到的碎片为空。无法恢复先前的片段。尝试了许多解决方案,但都不起作用。解决这个问题的办法是什么?我不知道怎么解决这个问题Android 在popbackstack之后获取空片段,android,android-fragments,Android,Android Fragments,当我按下后退按钮时,得到的碎片为空。无法恢复先前的片段。尝试了许多解决方案,但都不起作用。解决这个问题的办法是什么?我不知道怎么解决这个问题 private void displayView(int position) { Fragment fragment = null; switch (position) { case 0: fragment = mHomeFragmentInstance; break; case 1:
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = mHomeFragmentInstance;
break;
case 1:
fragment = mOrderFragmentInstance;
break;
case 2:
fragment = mOrdersheetFragmentInstance;
break;
case 3:
fragment = mMyorderwidgetFragmentInstance;
break;
case 4:
Intent intent=new Intent(this,LoginActivity.class);
startActivity(intent);
clearValues();
finish();
return;
default:
fragment = mHomeFragmentInstance;
break;
}
if (fragment != null) {
replaceFragment(fragment, position);
}
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
public void replaceFragment(Fragment fragment){
if (fragment != null) {
Fragment currentFragment = this.getSupportFragmentManager().findFragmentById(R.id.frame_container);
if(null != currentFragment ){
if(currentFragment.equals(fragment)){
return;
}else{
getSupportFragmentManager().beginTransaction().remove(currentFragment).commit();
}
}
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_container, fragment);
ft.addToBackStack(null);
ft.commit();
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
public void replaceFragment(Fragment fragment, int position){
adapter.selectItem(position);
Log.i("TAG", "replaceFragment:"+fragment.getClass().getName()+":"+position);
replaceFragment(fragment);
Log.i("TAG", "Add"+fragment.getClass().getName()+"backStackFragment");
if(fragment.equals(mHomeFragmentInstance)){
Log.i("TAG", "clear backStackFragment");
backStackFragment.clear();
backStackFragment.add(mHomeFragmentInstance);
}
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(drawerContainer);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
//getActionBar().setTitle(Html.fromHtml("<font color='#983A1B'>" + title + "</font>"));
View view = getActionBar().getCustomView();
//((TextView)view.findViewById(R.id.title)).setText(Html.fromHtml("<font color='#983A1B'>" + title + "</font>"));
((TextView)view.findViewById(R.id.title)).setText(Html.fromHtml("<font color='"+ ApplicationInfo.getPlfColor(this)+"'>" + title + "</font>"));
}
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 1) {
fm.popBackStack();
}else {
//super.onBackPressed();
finish();
}
}
}
private void显示视图(int位置){
片段=空;
开关(位置){
案例0:
fragment=mHomeFragmentInstance;
打破
案例1:
fragment=mOrderFragmentInstance;
打破
案例2:
fragment=mOrdersheetFragmentInstance;
打破
案例3:
fragment=mMyorderwidgetFragmentInstance;
打破
案例4:
Intent Intent=新Intent(这是LoginActivity.class);
星触觉(意向);
clearValues();
完成();
返回;
违约:
fragment=mHomeFragmentInstance;
打破
}
if(片段!=null){
替换片段(片段,位置);
}
}
/**
*使用ActionBarDrawerToggle时,必须在
*onPostCreate()和onConfigurationChanged()。。。
*/
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
公共无效替换碎片(碎片碎片){
if(片段!=null){
Fragment currentFragment=this.getSupportFragmentManager().findFragmentById(R.id.frame_容器);
if(null!=currentFragment){
if(currentFragment.equals(fragment)){
返回;
}否则{
getSupportFragmentManager().beginTransaction().remove(currentFragment.commit();
}
}
FragmentManager fm=getSupportFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.更换(R.id.框架/容器,碎片);
ft.addToBackStack(空);
ft.commit();
}否则{
//创建片段时出错
Log.e(“MainActivity”,“创建片段时出错”);
}
}
公共void replaceFragment(片段片段,int位置){
适配器。选择项目(位置);
Log.i(“TAG”、“replaceFragment:+fragment.getClass().getName()+”:“+position”);
替换片段(片段);
Log.i(“TAG”、“Add”+fragment.getClass().getName()+backStackFragment”);
if(fragment.equals(mHomeFragmentInstance)){
Log.i(“标记”,“清除反背景碎片”);
backbackfragment.clear();
添加(mHomeFragmentInstance);
}
mDrawerList.setItemChecked(位置,true);
mDrawerList.setSelection(职位);
setTitle(导航工具[位置]);
mDrawerLayout.closeDrawer(抽屉容器);
}
@凌驾
公共无效设置标题(字符序列标题){
mTitle=标题;
//getActionBar().setTitle(Html.fromHtml(“+title+”);
视图=getActionBar().getCustomView();
//((TextView)view.findviewbyd(R.id.title)).setText(Html.fromHtml(“+title+”));
((TextView)view.findviewbyd(R.id.title)).setText(Html.fromHtml(“+title+”));
}
@凌驾
public void onBackPressed(){
FragmentManager fm=getSupportFragmentManager();
if(fm.getBackbackEntryCount()>1){
fm.popbackbackstack();
}否则{
//super.onBackPressed();
完成();
}
}
}
在片段之间转换时,只需添加addToBackStack,如下所示:
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit();
如果您编写addToBackStack(null),它将自行处理,但如果您提供标记,则应手动处理。write onBackPressed()方法并显示所需内容。这是一种活动方法。或者重写方法实际上它在活动中被重写。通过删除这些行Fragment currentFragment=this.getSupportFragmentManager().findFragmentById(R.id.frame_容器)来检查此问题;if(null!=currentFragment){if(currentFragment.equals(fragment)){return;}否则{getSupportFragmentManager().beginTransaction().remove(currentFragment.commit();}}