片段从第二个片段到第一个片段的堆栈

时间:2017-08-25 11:49:23

标签: android android-fragments kotlin onbackpressed

我有viewpager选项卡片段,并从按钮上的一个tabb片段点击它打开另一个片段和另一个第二片段我想添加backpress事件,因为我正在退出它退出应用程序,因为我已经编写了Double back press退出代码在我的根片段,我不希望这个代码调用我的另一个第二个片段,因为我只想回到我以前的片段一步 这里是代码

 R.id.Recharge -> {

            val pl = Payment_History()

            fragmentTransaction = fragmentManager!!.beginTransaction()
            fragmentTransaction.replace(R.id.frame_container, paypal)
            fragmentTransaction.addToBackStack(null)
            fragmentTransaction.commit()


        }

在付款记录中,我正在呼叫Back press override功能

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

4 个答案:

答案 0 :(得分:0)

将您的片段添加到backstack,然后在onBackPressed方法中执行以下操作:

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

有关详细信息,请参阅this

希望这是你正在寻找的,它会帮助你。

答案 1 :(得分:0)

试试这个(而不是“替换”使用“添加”)

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

答案 2 :(得分:0)

如果片段内的片段使用此代码onbackpreesed方法

.fadein img
{
  ...
  z-index: -1;
  position:absolute; // <-- this is the important change
  left:0;
  right:0;
  ...

 }

每个片段存储在堆栈中

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

它在我的项目中起作用

答案 3 :(得分:0)

我在活动中使用了这个

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