簡體   English   中英

從第二個片段到第一個片段的片段返回堆棧

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM