Android后退按钮在片段中不工作

Android后退按钮在片段中不工作,android,android-fragments,fragment,Android,Android Fragments,Fragment,我是android新手,从我的活动中我被称为fragment_1,然后从fragment_1中我被称为fragment_2。这很好。当我按下fragment_2的后退按钮时,它不工作(我想返回fragment_1) 你的碎片已经被添加到backback。但是你需要“弹出backbackback”一次,让Android设备显示你添加到其backbackback中的片段。 只需将这些代码行添加到活动的onBackPressed()中 主要活动: getSupportFragmentManager()

我是android新手,从我的活动中我被称为fragment_1,然后从fragment_1中我被称为fragment_2。这很好。当我按下fragment_2的后退按钮时,它不工作(我想返回fragment_1)


你的碎片已经被添加到backback。但是你需要“弹出backbackback”一次,让Android设备显示你添加到其backbackback中的片段。 只需将这些代码行添加到活动的onBackPressed()中

主要活动:

getSupportFragmentManager().beginTransaction()
   .add(R.id.something,new Fragment1()).addToBackStack(null).commit();
来自碎片1:

getActivity().getSupportFragmentManager().beginTransaction()
   .replace(R.id.something,new Fragment2()).addToBackStack(null).commit();

这个代码对我来说很有用

@Override
public void onBackPressed(){
  if (getSupportFragmentManager().getBackStackEntryCount() == 1){
    finish();
  }
  else {
    super.onBackPressed();
  }
}

注意:-始终在事务中添加第一个片段,然后替换事务中的每个片段,为了返回到上一个片段,您必须将该片段添加到backstack,如下所示

FragmentTransaction fragTrans = fragmentManager.beginTransaction();
fragTrans.addToBackStack("DashboardFragment");
fragTrans.replace(contentFrameId, openDashBoard, "OpenDashboardFragment");
在主活动中反压

if (fragmentManager.getBackStackEntryCount() == 1) {
      AlertExit();
} else {
      int backStackId = fragmentManager.getBackStackEntryAt(i).getId();
      fragmentManager.popBackStack(backStackId, FragmentManager.POP_BACK_STACK_INCLUSIVE);

如果您使用的是工具栏后退按钮,请确保片段中包含以下代码:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //required for back button to work
    setHasOptionsMenu(true);
}
并覆盖此功能:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.i(TAG,"Back Button Pressed");
        switch (item.getItemId()) {
            case android.R.id.home:
                Log.i(TAG,"home on backpressed");
                getActivity().onBackPressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

在我将AndroidManifext.xml中的代码添加到所讨论的活动中之后,这对我来说是有效的。嗯,这很奇怪。我有一个项目,我不这样做,但它仍然弹出回来。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //required for back button to work
    setHasOptionsMenu(true);
}
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.i(TAG,"Back Button Pressed");
        switch (item.getItemId()) {
            case android.R.id.home:
                Log.i(TAG,"home on backpressed");
                getActivity().onBackPressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }