Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从第二个片段到第一个片段的片段回栈_Android_Android Fragments_Kotlin_Onbackpressed - Fatal编程技术网

Android 从第二个片段到第一个片段的片段回栈

Android 从第二个片段到第一个片段的片段回栈,android,android-fragments,kotlin,onbackpressed,Android,Android Fragments,Kotlin,Onbackpressed,我有viewpager选项卡片段,从按钮上的一个选项卡片段点击它打开另一个片段和另一个第二个片段我想添加反压事件,因为我正在反压它退出应用程序,因为我已经在我的根片段中编写了双反压退出代码,我不希望此代码调用我的另一个第二个片段我只想回到我之前的片段 这里是代码 R.id.Recharge -> { val pl = Payment_History() fragmentTransaction = fragmentManager!!.be

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

 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,它调用了应用程序的退出代码。我想让它回到之前的片段。因为我已经写了这个片段代码,但不起作用。 任何人都知道如何将第二个嵌套片段返回到前一个片段

我的主活动中的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)
    }
}

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

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack(); 
    } else { 
        this.finish(); 
    }
}
有关更多信息,请参阅


希望这是您正在寻找的内容,并对您有所帮助。

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

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack(); 
    } else { 
        this.finish(); 
    }
}
有关更多信息,请参阅

希望这是您正在寻找的,并对您有所帮助。

尝试一下(不要使用“替换”或“添加”)

尝试此方法(使用“添加”代替“替换”)


如果fragment back中有片段,请使用此代码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();

如果fragment back中的fragment使用这个代码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
}

我在活动中使用了这个

步骤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
}

这是行不通的。因为它再次提供了从应用程序中退出的选项,所以这是不起作用的。因为它再次提供了退出的选项aplication@JRamesh我已经使用了你的解决方案,但从退出时仍然无法再次使用apllication@JRamesh我已经使用了您的解决方案,但仍然无法再次使用。退出应用程序时,我的片段是嵌套片段,我已经在第三个片段中编写了代码,希望返回第二个片段碎片。但是不知道第一个片段返回事件侦听器将如何运行。在主活动集合OnBackPressed方法中,当您替换片段时,FragmentManager ff=getFragmentManager();ff.beginTransaction().replace(R.id.main_content,new your fragment name()).addToBackStack(null.commit();我同意你的回答,但在什么情况下,在我的主要活动中,我编写了双反压事件代码,即退出应用程序的代码。我的主要活动包含四个Viewpager选项卡片段。我的第一个标签片段打开了另一个关于嵌套片段的片段。所以实际上我想要的是从嵌套片段返回到第一个标签片段。但是我的嵌套片段在调用main activity double press exit code时做了什么我通过引用这个链接解决了这个问题我的片段是嵌套片段,我已经在第三个片段中编写了代码,我想返回到第二个片段。但是不知道第一个片段返回事件侦听器将如何运行。在主活动集合OnBackPressed方法中,当您替换片段时,FragmentManager ff=getFragmentManager();ff.beginTransaction().replace(R.id.main_content,new your fragment name()).addToBackStack(null.commit();我同意你的回答,但在什么情况下,在我的主要活动中,我编写了双反压事件代码,即退出应用程序的代码。我的主要活动包含四个Viewpager选项卡片段。我的第一个标签片段打开了另一个关于嵌套片段的片段。所以实际上我想要的是从嵌套片段返回到第一个标签片段。但我的嵌套片段调用主活动双击退出代码时所做的操作我通过引用此链接解决了此问题