如何在 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
}
我想回到以前的 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
}