1

在我的應用程序中我有導航抽屜,所以我有一個MainActivity,其餘的都是片段。我的應用程序工作正常。每當我按回來按鈕它重定向到以前的fragment.it工作正常。但我想要的是成功支付後,我顯示成功的付款頁面,在這個頁面上,當用戶按下後退按鈕我想重定向到HomeFragment,但現在它去了到Placeorder片段。Onbackpressed重定向到特定片段

@Override 
    public void onBackPressed() { 
     if(getFragmentManager().getBackStackEntryCount() == 0) { 
      super.onBackPressed(); 
     } 
     else { 
      getFragmentManager().popBackStack(); 
     } 
    } 
+0

時付款成功,刪除所有其他片段,顯示SuccessfulPa yment頁面,然後在幾秒鐘後將其刪除 – MohammedAlSafwan

+0

該怎麼做? – chris

+0

試着用if(!activeFragment.onBackPressed())替換你的if條件,我認爲它會正常工作 –

回答

0

覆蓋您onBackPress方法:

@Override 
public void onBackPressed() { 
    if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){ 
    fragment.getChildFragmentManager().popBackStack(); 
    }else { 
    super.onBackPressed(); 
    } 
} 
0

你應該在抽象類片段如下模擬功能

/** 
    * Handle "Back" key pressed. 
    * @return TRUE if the "Back" key pressed was handled. FALSE indicate it's not handled and parent class can handle it. 
    */ 
    public abstract boolean onBackPressed() 

而且在MainActivity,你會處理這個功能

 @Override 
    public void onBackPressed() { 
     if (mSelectedFragment != null && mSelectedFragment.onBackPressed()) { 
      return; 
     } else { 
      super.onBackPressed 
     } 
    } 
+0

什麼是mSelectedFragment – chris

+0

片段處於可見狀態,可以與用戶界面集成 –

+0

哪裏可以調用此方法 – chris

0

用途:

fragmentTransaction.replace(R.id.fragment_container, mFeedFragment); 
fragmentTransaction.commit(); 

唐不要這樣做:

fragmentTransaction.addToBackStack(null); 
+0

只是調用該家庭片段,但不使用addToBackStack – Rahul

+0

但我在哪裏可以打電話給這個 – chris

+0

實際上後退按鈕不應該讓用戶在任何地方後面按保持usere只有和添加按鈕,並把用戶到homeFragment – Rahul

0

辦法之一是節省以前片段(previousFragment)變量,同時打開新的片斷,使之無效,當你在第一或佔位符片段....然後檢查內部onBackPressed方法previousFragment值,如果爲null執行退出操作,否則用previousFragment替換片段,通過該片段,您將在返回按下時返回上一個片段。

+0

我不想去以前的片段..只爲付款成功 – chris

0

裏面你onBackPressed()這樣做:

@Override 
    public void onBackPressed() { 
     if(getSupportFragmentManger.findFragmentByTag("paymentFragment") != null){ 
      //add homeFragment; 
     } 
     else{ 
      if(getFragmentManager().getBackStackEntryCount() == 0) { 
       super.onBackPressed(); 
      } 
      else { 
       getFragmentManager().popBackStack(); 
      } 
     } 
    } 
0

你可以設置一些全局變量(真當付款成功;否則返回false)的應用類中只要檢查該變量是否爲真,那麼在你的活動壓抑下調用該函數。

public void clearBackStack() { 
     FragmentManager manager = getSupportFragmentManager(); 
     if (manager.getBackStackEntryCount() > 0) { 
      FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); 
      manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 
0

按照這種簡單的方法 聲明整數作爲

public int count; 

在你的主頁初始化這樣算不算count=0

現在包括這個在您的主要活動

@Override 
public void onBackPressed() { 
    if (count == 1) { 
     if (exit) { 
      super.onBackPressed(); 
      return; 
     } else { 
      Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show(); 
      exit = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        exit = false; 
       } 
      }, 2000); 
     } 
    }else { 
     toolbar.setTitle("Home"); 
     mDrawerLayout.closeDrawers(); 
     count=1; 
     display(0); 
    } 
}