>我有viewpager选项卡片段,从一个tabb片段单击它打开另一个片段和另一个第二个片段我想添加反压事件,因为我正在做反压退出应用程序,因为我在我的根片段中编写了双回按退出代码的代码,我不希望这段代码调用我的另一个第二个片段,因为我只想回到我以前的片段 因为这里是代码
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()
}
并在单击付款历史记录时,它从应用程序中调用退出代码。 我希望它回到以前的片段。因为我写了这个片段代码,但不起作用。 任何人都知道如何将第二个嵌套片段备份到上一个片段。
我的主活动中的 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)
}
}
将片段添加到backstack,然后在onBackPressing方法中执行以下操作:
@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();
}
}
如果片段返回中的片段使用此代码反向预处理方法
@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
}
我在这方面也很挣扎。 经过大量研究,我找到了一个解决方案,我们必须将其称为super.onBackPressed()
,其中最后一个或主片段处于活动
状态溶液
override fun onBackPressed() {
val activeFragment = this.supportFragmentManager.
findFragmentById(R.id.frame_layout)
if (activeFragment is HomeFragment){
startActivity(Intent(this, DashBoardActivity::class.java))
finish()
super.onBackPressed()
}
else
{
val ft: FragmentTransaction
=supportFragmentManager.beginTransaction()
//should not call super.onBackPressed()
switchFragment(ft)
}
//nor here you should call super.onBackPressed()
}
而开关片段函数是
fun switchFragment(ft:FragmentTransaction) {
try {
ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
if (supportFragmentManager.findFragmentById(R.id.frame_layout) == null) {
ft.add(R.id.frame_layout, HomeFragment())
} else {
ft.replace(R.id.frame_layout, HomeFragment())
println("Comess")
}
ft.addToBackStack(null)
ft.commit()
} catch (e: Exception) {
e.printStackTrace()
}
}