如何在 android 中单击 phone 的后退按钮转到上一个片段?

How to go the previous fragment on the click of the back button of phone in android?

我想回到以前的 fragment.I 尝试了很多方法,例如 addtobackstack(null) 等等。但我没有得到解决方案。我的问题是当我点击后退按钮时它会转到主页片段。但我不想要它。我希望当我点击后退按钮时它会转到上一个片段。谁能告诉我该怎么做?

这是我的onActivityCreated()方法:-

 @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            getView().setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View view, int i, KeyEvent keyEvent) {
                    if (i == KeyEvent.KEYCODE_BACK) {

                        getFragmentManager().popBackStack();
                        return true;


                    }


                    return false;
                }
            });

        }

这是第一个片段:-

 Fragment fragment = new Packages();
 getActivity().getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.container, fragment).addToBackStack(null).commit();

这是第二个片段:-

  Fragment fragment = new DeliveryFrag();
 mContext.getActivity().getSupportFragmentManager()
                            .beginTransaction()
                            .replace(R.id.container, fragment).addToBackStack(null)
                            .commit();

这是第三个片段:-

Fragment fragment = new paytm();
   getActivity().getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.container, fragment).addToBackStack(null)
                                        .commit();

我正在获取视图并在其上应用集合 onClickListner。但是程序没有进入这个方法。我不知道为什么?谁能告诉我我做错了什么?

您必须使用 fragmentManager.addToBackStack(<fragment tag>).commit(); 将片段保存在堆栈中。然后尝试做 getFragmentManager().popBackStack();

你应该在onResume中调用这个方法。像这样:

 @Override
    public void onResume() {
        super.onResume();

        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (keyCode == KeyEvent.KEYCODE_BACK) {

                    getFragmentManager().popBackStack();
                    return true;
                }

                return false;
            }
        });

    }

让所有publicFragment都这样

public Fragment currentFrag = null;
public Fragment f1 = new Packages();
public Fragment f2 = new DeliveryFrag();
public Fragment f3 = new paytm();

然后,在更改 Fragment 的按钮上,用下一个

填充空值 currentFrag
@Override
public void onClick(View v){

if(currentFrag == null || currentFrag == f1){
   //open second fragment code
   currentFrag = f2;
   }else if(currentFrag == f2){
   //open third fragment code
   currentFrag = f3;
   }
}

然后你在你的主 activity

中覆盖 onBackPressed() 方法
@Override
public void onBackPressed()
{
  if (currentFrag == f1){
  super.onBackPressed() // close the app
  }else if(currentFrag == f2){
  //calling your first fragment code
  currentFrag = null;
  }else if(currentFrag == f3){
  //calling your second fragment code
  currentFrag = f2;
  }
}

我希望这会有所帮助,因为即使我有点困惑

对我有用……你可以试试这个……可能对你有帮助……

write addToBackStack(null) before commit();

并在您的 onBackPressed() 方法中编写以下代码。

  FragmentManager fm = getSupportFragmentManager();

    if (fm.getBackStackEntryCount() > 1) {
        ApplicationLog.Log(TAG,"IN > 1");
        fm.popBackStack(); //will redirect you previous visited fragment
    }
    else if(fm.getBackStackEntryCount()==1)
    {
      finish(); //will close application
    }