2016-08-04 231 views
3

我正在使用viewpager並編譯API 23.我在下面的語句的代碼中顯示了一個編譯錯誤,但是該項目沒有編譯。getSupportFragmentManager()。getFragments()已棄用?

List<Fragment> fragments = getSupportFragmentManager().getFragments(); 

此外,我無法在Android文檔中找到支持片段管理器和非支持片段管理器的此方法。有人知道這裏發生了什麼嗎?

+0

邁克爾的回答第一個評論說,這一切... http://stackoverflow.com/questions/6102007/is-there -a-way-to-get-references-for-all-currently-active-fragments-in-an-activi'我們不應該使用這種方法。它用@hide標記,不應該包含在支持庫jar中。它不應該被視爲導出的API的一部分.'因爲它隱藏**,我猜Google最終決定刪除這個方法。 –

+0

你使用導入android.support.v4.app.Fragment ;? – sonnv1368

+0

從支持庫版本24.1.1開始,該方法尚未被棄用。什麼是顯示的錯誤? –

回答

3

其實我這樣做是爲了讓所有片段的引用:

private List<WeakReference<Fragment>> mFragList = new ArrayList<WeakReference<Fragment>>(); 

@Override 
public void onAttachFragment (Fragment fragment) { 
    mFragList.add(new WeakReference(fragment)); 
} 

public List<Fragment> getActiveFragments() { 
    ArrayList<Fragment> ret = new ArrayList<Fragment>(); 
    for(WeakReference<Fragment> ref : mFragList) { 
     Fragment f = ref.get(); 
     if(f != null) { 
      if(f.isVisible()) { 
       ret.add(f); 
      } 
     } 
    } 
    return ret; 
} 

public Fragment findFragement(String tClass) { 

    List<Fragment> fragments = getActiveFragments(); 
    for (Fragment fragment : fragments) { 
     if (tClass.equalsIgnoreCase("Home")) { 
      if (fragment instanceof ToggleFragment) { 
       return fragment; 

      } 
     } else if (tClass.equalsIgnoreCase("Contacts")) { 
      if (fragment instanceof ContactFragment) { 
       return fragment; 
      } 
     } 
    } 
    return null; 
} 
+0

非常感謝! !而且,如果你能解釋getactivefragments做什麼,這將是真棒 –

+0

也:@覆蓋 公共無效onAttachFragment(片段片段){ mFragList.add(新的WeakReference(片段));} 母艦一樣導致重複當重新創建一個屏幕或使用ft.replace()時 –

+0

@MarissaNicholas當屏幕被重新創建時(例如在旋轉時),我認爲它不會創建重複的內容,也許在ft.replace()。 –