[英]How to go the previous fragment on the click of the back button of phone in android?
我想回到上一個片段。我嘗試了很多方法,例如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();
我正在獲取視圖並在其上應用 set onClickListner
。 但是程序沒有進入這個方法。 我不知道為什么? 請誰能告訴我我做錯了什么?
您必須使用fragmentManager.addToBackStack(<fragment tag>).commit();
將片段保存在堆棧中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;
}
});
}
像這樣制作所有公共Fragment
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;
}
}
然后你在你的主要活動中覆蓋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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.