![](/img/trans.png)
[英]How to pass a List as an argument to a Fragment using Navigation Component safeargs
[英]What is the correct way to pass an Enum as an argument to a Fragment using Navigation Component safeargs
該文檔討論了如何發送簡單的整數和字符串。 例如:
<argument
android:name="myIntArg"
android:defaultValue="255"
app:argType="integer" />
在原始片段中:
val action = OriginFragmentDirections.myAction(myInt)
findNavController().navigate(action)
在目標片段中:
val receivedInt = DestinationFragmentArgs.fromBundle(arguments).myIntArg
但是說而不是myIntArg
,我想發送一個枚舉( myEnumArg
)。 我該怎么做? 我會在我的論點中使用什么app:argType
?
編輯:根據Navigation 1.0.0-alpha08 發行說明:
Safe Args 支持 Serializable 對象,包括 Enum 值。 枚舉類型可以通過使用沒有類名的枚舉文字來設置默認值(例如
app:defaultValue="READ"
) b/111316353
所以這現在是可能的 - 您可以使用 Enum 類的名稱(即com.example.EnumClass
)或相對名稱( .EnumClass
),它會自動將您的應用程序的包名稱添加到類名稱之前。
上一個答案:
這在當前版本的 Navigation (1.0.0-alpha07) 中是不可能的,但是現有的功能請求被標記為固定的,並且在 alpha08 中將提供使用枚舉作為參數的能力
正如@ianhanniballake 在他更新的答案中提到的,您需要使用最新版本的 Navigation。
假設我們有一個像下面這樣的Enum並且您的應用程序包名稱是com.example.app
。
package com.example.app.path.to.type.file
public enum class Type {
First,
Second,
Third
}
現在我們只需要像這樣聲明 Arg:
<fragment
...>
<argument
android:name="type"
android:defaultValue="Second"
app:argType=".path.to.type.file.Type" />
...
</fragment>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.