片段回到从第二片段到第一片段堆叠(Fragment Back stack from second f

2019-09-29 02:19发布

我有viewpager标签片段和按钮一个塔布片段点击打开另一个片段和另一个第二个片段我想补充backpress的事件,因为我做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我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)
    }
}

Answer 1:

添加您的片段堆栈中,然后在onBackPressed方法做这样的事情:

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack(); 
    } else { 
        this.finish(); 
    }
}

欲了解更多信息,请参阅本

希望这是你在找什么,它可以帮助你。



Answer 2:

试试这个(而不是“取代”使用“添加”)

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(); 
    }
}


Answer 3:

如果片段内片段背面使用此代码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();

它在我的项目工作



Answer 4:

我在活动中使用此

第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
}


文章来源: Fragment Back stack from second fragment to first fragment