2017-08-25 124 views
1

我有viewpager选项卡片段,并从按钮上的一个tabb片段单击它打开另一个片段,另一个片段我想添加后备事件,因为我做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

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

回答

0

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

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

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

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

+0

这是行不通的。因为它再次提供退出应用程序的退出选项 – Jyoti

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

@J Ramesh我已经使用了你的解决方案,但仍然没有再次退出应用程序 – Jyoti

0

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

它的工作在我的项目

+0

我的片段是嵌套片段,我写了我的代码在第三个片段,并希望返回按第二个片段。但不知道它将如何首先分割回事件监听器。 – Jyoti

+0

所以不幸的是,我的代码也不适合我。 – Jyoti

+0

在你的主要活动中设置了OnBackPressed方法,当你替换那个时候的片段FragmentManager ff = getFragmentManager(); ff.beginTransaction()。replace(R.id.main_content,new your fragment name())。addToBackStack(null).commit(); – Jigish

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 
} 
相关问题