[英]Fragment Back stack from second fragment to first fragment
我有viewpager選項卡片段,然后從按鈕上的一個tabb片段中單擊它,打開另一個片段和另一個第二個片段,我想添加backpress事件,因為我正在做backpress退出應用程序,因為我已經在根目錄中編寫了Double back press exit代碼片段,我不希望此代碼在我的另一個片段中調用,因為我只想退回到上一個片段,因為這是代碼
R.id.Recharge -> {
val pl = Payment_History()
fragmentTransaction = fragmentManager!!.beginTransaction()
fragmentTransaction.replace(R.id.frame_container, paypal)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
在付款歷史記錄中,我正在調用“后退”按覆蓋功能
override fun onBackPressed(): Boolean {
super.onBackPressed()
}
然后點擊Paymenthistory,它從應用程序中退出代碼。 我希望它回到以前的片段。 由於我已經編寫了此片段代碼,但無法正常工作。 任何人都知道如何將第二個嵌套片段備份到前一個片段。
我的MainActivity中的OnBackPress代碼
override fun onBackPressed() {
// TODO Auto-generated method stub
try {
if (getFragmentManager().getBackStackEntryCount() == 0) {
if (doubleBackToExitPressedOnce) {
//super.onBackPressed();
val startMain = Intent(Intent.ACTION_MAIN)
startMain.addCategory(Intent.CATEGORY_HOME)
startMain.flags = Intent.FLAG_ACTIVITY_NEW_TASK
pref!!.setLoggedIn(true)
startMain.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
startMain.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(startMain)
return
}
this.doubleBackToExitPressedOnce = true
Toast.makeText(this, "Please click again to exit", Toast.LENGTH_SHORT).show()
Handler().postDelayed({ doubleBackToExitPressedOnce = false }, 2000)
}
}catch (e:Exception){
println("homemessage"+ e.message)
}
}
將片段添加到堆棧中,然后在onBackPressed方法中執行以下操作:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
this.finish();
}
}
欲了解更多信息,請參閱本
希望這是您想要的,並且對您有所幫助。
試試這個(代替“替換”使用“添加”)
fragmentTransaction = fragmentManager!!.beginTransaction()
fragmentTransaction.add(R.id.frame_container, paypal)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
和
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
this.finish();
}
}
如果片段內的片段使用此代碼onbackpreesed方法
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if(getFragmentManager().getBackStackEntryCount() == 1) {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Check out")
.setMessage("want to do check out?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
closeApp();
}
})
.setNegativeButton("No",null)
.show();
}
else {
super.onBackPressed();
}
}
每個片段存儲在堆棧中
FragmentManager ff=getFragmentManager();
ff.beginTransaction().replace(R.id.main_content,new home()).addToBackStack(null).commit();
這是我的項目
我在活動中使用了
第1步:
為布爾創建全局變量
private boolean doubleBackToExitPressedOnce = false;
第2步:
然后在onBackPress()方法中進行活動
我做到了
@Override
public void onBackPressed() {
if (mViewPager.getCurrentItem() > 0) {
//if any tab selected instead of tab 1
mDoubleBackToExitPressedOnce = false;
} else if (mViewPager.getCurrentItem() == 0) {
//if tab 1 selected
mDoubleBackToExitPressedOnce = true;
if (mDoubleBackToExitPressedOnce)
super.onBackPressed();
}
mViewPager.setCurrentItem(0);//go to tab 1
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.