LoginSignup
0
0

Navigationのデスティネーションの引数の型にインナークラスを使う

Posted at

内容

package androidx.navigation.myapp

class Argument {
    enum class Type {
        A,
        B,
    }
}

上記TypeNavigationコンポーネントのデスティネーションのargumentに指定するとき、下記のように書いてしまいがちですが、エラーになります。

<argument
    android:name="type"
    app:argType="androidx.navigation.myapp.Argument.Type" />

こちらのように$を使います。

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_graph">

    <fragment    
        android:name="androidx.navigation.myapp.MyFragment">
        <argument
            android:name="type"
            app:argType="androidx.navigation.myapp.Argument$Type" />
    </fragment>

</navigation>

また、app:argTypeに自作クラスを利用し、R8を設定している場合は、@Keepでクラス名が書きかわらないようにしておきましょう。@Keepをつけないとアプリ起動時にクラッシュが発生します。

package androidx.navigation.myapp

@Keep
class Argument {
    @Keep
    enum class Type {
        A,
        B,
    }
}

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0