如何設置Fragment
的Id
以便我可以使用getSupportFragmentManager().findFragmentById(R.id.--)
?Android - 設置片段ID
回答
您無法以編程方式設置片段ID。
然而,你可以在FragmentTransaction中設置一個String tag
,它可以用來唯一標識一個Fragment。
正如Aleksey指出的,您可以將ID傳遞給FragmentTransaction
的add(int, Fragment)
方法。但是,這沒有指定片段的ID。它指定將Fragment
插入的ViewGroup
的ID。這對於我期望的目的沒有用處,因爲它並不唯一確定Fragment
s,而是ViewGroup
s。這些ID是容器那一個或更多片段可以動態添加。使用這種方法來識別Fragment
將需要您動態地將ViewGroup
s添加到您插入的每個Fragment
的佈局中。這將是非常麻煩的。
所以,如果你的問題是如何爲你動態添加片段的唯一標識符,答案是使用FragmentTransaction
的add(int containerViewId, Fragment fragment, String tag)方法和FragmentManager
的findFragmentByTag(String)方法。
在我的一個應用程序中,我被迫動態地生成字符串。但無論如何,它與實際的FragmentTransaction相比並不算昂貴。
標記方法的另一個優點是它可以識別未添加到UI中的片段。請參閱FragmentTransaction的add(Fragment, String)方法。 Fragment
s不需要有View
s!它們也可以用來在配置更改之間保持短暫狀態!
在大多數情況下,您可以使用片段標籤以及ID。
您可以在FragmentTransaction.add(Fragment fragment, String tag);
中設置標籤值。 然後您可以使用命令FragmentManager.findFragmentByTag(String tab)
來查找有問題的片段。
正如Tom和其他人已經提到的,有一些方法可以在片段上放置標籤並使用該標籤進行識別。我接觸到這些解決方案的後續問題是,片段在與活動(或實際上,FragmentManager
)關聯之前不會獲得標籤。如果需要在標記片段之前識別片段,該怎麼辦?
到目前爲止,我的解決方案都依賴於世界上最古老的(Java)技巧:創建一個簡約的模板片段,它在其構造函數之一中提供一個id,並提供返回該id的getFragmentId()
方法。然後我讓那些需要儘早識別的片段擴展該模板,瞧!問題解決了。
不幸的是,該解決方案可能需要一組模板片段,每個片段類型一個,需要早期識別的ListFragment
,DialogFragment
或普通舊Fragment
(POFO ?!)。但考慮到提供的收益,我認爲這是可以控制的。
對不起,撕裂傷口癒合:-)
乾杯!
原來你可能不需要知道片段ID。
從文檔:
public abstract Fragment findFragmentById (int id)
Finds a fragment that was identified by the given id either
when inflated from XML or as the container ID when added in
a transaction.
重要的部分是「作爲一個事務添加當容器ID」。
這樣:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_holder, new AwesomeFragment())
.commit();
然後
AwesomeFragment awesome = (AwesomeFragment)
getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
將讓你任何(真棒)片段在R.id.fragment_holder舉行。
除了Tom的回答,replace方法還支持片段標籤,另外還有add方法。
使用以下命令:
要添加一個片段:
getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentToBeAdded, tag).commit();
查明現有片段:
getFragmentManager().findFragmentByTag(fragmentName);
- 1. 設置片段ID編程方式與事務中的Android
- 2. 無法在Android中設置一個片段的ID
- 3. 設置片段
- 4. 在片段重疊Android設置
- 5. Android設置來自片段的報警
- 6. 設置onclicklistener片段
- 7. 爲片段設置背景?
- 8. 設置InteractionListener與內片段
- 9. 設置OnBackPressed在片段
- 10. Android:將卡片設計爲片段
- 11. Android:如何查找片段容器ID
- 12. 沒有找到id viewpager片段android
- 13. 加載時設置片段ID而不觸發onhashchange事件
- 14. Android:在設置語言更改時重新創建android片段
- 15. Android設置可點擊的文本去一個片段到另一個片段
- 16. 與設置片段地圖片段重疊
- 17. 無法設置片段菜單
- 18. 片段android片段調用
- 19. Yii2:設置圖片ID與HTML :: IMG
- 20. 如何設置卡片視圖的ID?
- 21. NullPointerException當在片段中設置onClickListener
- 22. 如何將片段設置爲BottomNavigation的默認片段?
- 23. 設置Android片段進入和退出轉換?
- 24. 使用Android片段設置並滑動表單
- 25. 從Android中的片段設置標題inToolBar
- 26. Android popBackStack立即給後臺片段設置動畫
- 27. Android爲Play Store兩個片段設置了不同的主題
- 28. 設置並獲取在android中使用標籤片段
- 29. 在android活動中設置片段的形狀和透明度
- 30. 在Android片段中設置標題工具欄給空指針
如果我使用的標籤,而不是ID的片段,會怎樣我使用需要一個片段資源ID的替換調用? – Namratha 2013-01-22 09:32:39
@Namratha,你不能。 – 2013-01-22 10:22:41
@TomDignan如何在ViewPager中添加一個片段?我怎樣才能設置他的標籤?在這種情況下我不能使用交易。 – GuilhE 2015-01-22 17:16:15