2014-09-24 118 views
0

我做了一個導航抽屜,我已經設置了一些項目,通常當我選擇一個項目時,當前片段將被一個新的改變,這不是我的情況,即使碎片發生變化,第一個Activity仍會顯示。這是我的onNavigationDrawerItemSelected方法,很顯然我每次點擊一個新的片段就改變片段。我怎樣才能得到當前的片段ID

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    // update the main content by replacing fragments 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    // TODO : Added 
    switch(position) { 
     /*case 0 : 
      fragmentManager.beginTransaction() 
        .replace(R.id.container, new ProfilFrgement()) 
        .commit(); 
      break;*/ 
     case 1: 
      fragmentManager.beginTransaction() 
        .replace(R.id.container, new SpotFragement()) 
        .commit(); 
      break; 
     case 2: 
      fragmentManager.beginTransaction() 
        .replace(R.id.container, new SessionsFragement()) 
        .commit(); 
      break; 
     /*case 3: 
      fragmentManager.beginTransaction() 
        .replace(R.id.container, new EventsFragment()) 
        .commit(); 
      break;*/ 

    } 

} 

我覺得我的問題是總是改變一個容器。所以我需要它獲取當前片段ID

回答

-1

什麼是當前片段ID? Ur id是R.id.container,它只是一個rt?那麼關於「我如何獲得當前的Fragment ID」有什麼問題?

如果問題是要找到哪些是當前片段顯示給用戶?如果是,那麼

Fragment ft = getSupportFragmentManager().findFragmentById(R.id.container); 

if (ft instanceof SpotFragement) { 
// navigation drawer item 1 and current fragment is SpotFragment. 
} else if (ft instanceof SessionsFragement) { 

} 
+0

我有一個活動,託管導航抽屜,並在項目單擊後我改變了片段,但容器的包含不顯示。 – 2014-09-24 12:10:04

+0

你的碎片沒有顯示在容器中? – 2014-09-24 12:11:18

+0

是的。但容器中包含一條消息,我必須測試這些更改是否通過了很好的結果,但情況並非如此(我不知道應該是空白) – 2014-09-24 12:21:50

-1

確保您的容器樣式是正確的。 檢查以下容器的值一次 -

  • 的android:layout_width
  • 安卓layout_height
+0

'android:layout_width =「match_parent」android:layout_height =「match_parent」'爲什麼? – 2014-09-24 12:27:57

0

對不起,太晚了,但我有一個解決方案來獲得片段ID。您可以使用片段類的名稱作爲標識符而不是ID。使用靜態字符串變量來存儲類名稱。

public class Activity{ 
... 
static String currentFragment = null; 
... 
... 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.nav_one: 
      setFragment(new oneFragment()); 
      break; 
     case R.id.nav_two: 
      setFragment(new twoFragment()); 
      break; 
    } 
    return true; 
} 

public static void setFragment(@NonNull Fragment f) { 
    if(!f.getClass().getName().equals(currentFragment)){ 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.container, f); 
    fragmentTransaction.commit(); 
    currentFragment = f.getClass().getName(); 
    } 
... 
}