片段从第二个片段返回堆栈到第一个片段
我有viewpager选项卡片段,并从按钮上的一个tabb片段单击它打开另一个片段,另一个片段我想添加后备事件,因为我做backpress它退出应用程序,因为我在我的根片段写的双背压退出代码代码,我不想这个代码在我的另一个第二个片段打电话,因为我想简单地一步一回头我以前的片段 由于这里是代码片段从第二个片段返回堆栈到第一个片段
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
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)
}
}
OnBackPress代码添加您的片段堆栈中,然后在onBackPressed方法做这样的事情:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
this.finish();
}
}
欲了解更多信息,请参阅this
希望这是你正在寻找的,它可以帮助你。
尝试这种(而不是 “取代” 使用 “添加”)
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();
}
}
@J Ramesh我已经使用了你的解决方案,但仍然没有再次退出应用程序 – Jyoti
如果片段内片段背面使用此代码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
}
这是行不通的。因为它再次提供退出应用程序的退出选项 – Jyoti