簡體   English   中英

使用導航組件安全參數將枚舉作為參數傳遞給片段的正確方法是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM