在android sdk26中,在清除backstack后不能正常工作更换片段。解决方案是什么?

时间:2017-10-30 09:55:09

标签: android android-fragments

if (id == R.id.profile) {
    Profile fr = new Profile();
    FragmentTransaction fm = getSupportFragmentManager().beginTransaction();
    clearBackStack();
    fm.replace(R.id.content_frame,fr);
    fm.addToBackStack("Profile");
    fm.commit();
} 

此代码首先给出配置文件片段。再次按此代码时会显示主页。但它在SDK 23中正常工作

1 个答案:

答案 0 :(得分:0)

像这样改变你的明确的背书

@Override
public void onBackPressed() {
   clearBackStack();
}


private void clearBackStack() {
     FragmentManager manager = getSupportFragmentManager();
     if (manager.getBackStackEntryCount() > 0) {
        Fragment fragment=manager.findFragmentById(R.id.YOUR_FRAME_LAYOUT);
        if(fragment!=null && fragment.getClass().getSimpleName().equalsIgnoreCase(YOUR_FRAGMENT.class.getSimpleName())){
            manager.popBackStackImmediate();
        }else {
            super.onBackPressed();
        }
    }
}

在添加片段时也不要清除backstack。只有按下后退按钮才能通过弹出片段清除堆栈。在添加片段时从代码中移除clearBackStack()