2016-05-04 137 views
0

帶碎片的導航抽屜。我在主要活動中放置了一個片段。但如果我回來按相同的片段再次出現。我該如何處理? 其次如何實現onBackpressed中的片段? 有人可以幫我嗎?onBack在活動和片段中按下

在主要活動的onCreate我

FragmentTransaction tx = getFragmentManager().beginTransaction(); 
    tx.replace(R.id.mainFrame, new PlaceOrderFragment()); 
    tx.commit(); 

,並在它的後面按我

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+1

http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press – PeDuCKA

+0

在交易,你嘗試把「addToBackstack ()'? – iroiroys

回答

-2

更換YPU片段的onCreate與片段ID,然後在相同的活動工具onBackpressed並找到帶有ID的片段,並檢查它是否可見或爲空,然後根據它執行操作。 希望你有這個。

+0

爲什麼當你只需要添加到後臺就可以做到這一點。 – drulabs

+0

如果你有多個片段,那麼你需要知道片段是否可用或不是一步一步,所以你可以回到片段 – pratik

+0

我不認爲這種情況在OP中提到。 – drulabs

0
 FragmentTransaction tx = getFragmentManager().beginTransaction(); 
      tx.replace(R.id.mainFrame, new PlaceOrderFragment()).addToBackStack("your tag"); 
      tx.commit(); 


     Override onBackPress() and try following code. 

     @Override 
     public void onBackPressed() { 

      int count = getFragmentManager().getBackStackEntryCount(); 

      if (count == 0) { 
       super.onBackPressed(); 
       //your other utility code if needed 
      } else { 
       getFragmentManager().popBackStack(); 
      } 

    } 

Hope this will work for you. 
0

您可以使用Interface來完成此操作。該接口將在每個片段中實現。下面是一個簡單的例子:

public interface OnBackPressedListener { 
    void onBackPressed(); 
} 

在這裏,如果您實現您的片段這個接口,那麼你會發現這個方法:

@Override 
    public void onBackPressed() { 
     getActivity().finish(); // Or Do your specific task 

    } 

現在你的活動,認爲片段,應該使用onBackPressed()回調。寫婁代碼在方法

@Override 
    public void onBackPressed() { 

     if (YOUR_DRAWER.isDrawerOpen(GravityCompat.START)) { 
      YOUR_DRAWER.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer! 
      return; 
     } 

     Fragment fragment=getYourVisibleFragment(); 
     if(fragment!=null){ 
      ((OnBackPressedListener)fragment).onBackPressed(); 
     }else{ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
    } 

如果你想獲得可見的片段就用這種方法

public <F extends Fragment> F getVisibleFragment() { 
     List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
     if (fragments != null) { 
      for (Fragment fragment : fragments) { 
       if (fragment != null && fragment.isVisible()) { 
        return (F) fragment; 
       } 
      } 
     } 
     return null; 
    } 

就是這樣:)

0

首先,你需要添加fragmnet背疊所以我們可以在稍後檢索onBackPressed()

用這個替換您的fragmnet交易

FragmentTransaction tx = getFragmentManager().beginTransaction(); 
tx.replace(R.id.mainFrame, new PlaceOrderFragment()); 
// HERE WE WILL ADD FRAGMENT TO BACKSTACK SO WE COULD GET BACK TO IT 
tx.addToBackStack(null); 
tx.commit(); 

替換您onBackPressed這個

@Override 
public void onBackPressed() { 
    // CHECKS HOW MANY FRAGMENTS ARE IN THE BACKSTACK 
    int count = getFragmentManager().getBackStackEntryCount(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     if (count == 0) { 
       // IF NO FRAGMENT IN THE BACKSTACK CALL 
       super.onBackPressed(); 
      } else { 
       // GET THE LAST OPENED FRAGMENT 
       getFragmentManager().popBackStack(); 
      } 
    } 
}