代码之家  ›  专栏  ›  技术社区  ›  liminal

导航架构组件:为deeplink传递占位符参数

  •  2
  • liminal  · 技术社区  · 6 年前

    使用Android Studio 3.3金丝雀7

    我导航的一部分_图形.xml

    <fragment
        android:id="@+id/noteDetailFragment"
        android:name="com.myapp.notes.notedetail.NoteDetailFragment"
        android:label="@string/label_note_detail"
        tools:layout="@layout/note_detail_fragment">
    
        <argument
            android:name="noteId"
            android:defaultValue="0"
            app:argType="integer" />
    
        <action
            android:id="@+id/action_noteDetail_to_editNote"
            app:destination="@id/editNoteFragment" />
    
        <deepLink
            android:id="@+id/noteDetailDeepLink"
            app:uri="notesapp://notes/{noteId}" />
    </fragment>
    

    AndroidManifest.xml文件包含:

        <activity android:name=".presentation.MainActivity">
            <nav-graph android:value="@navigation/navigation_graph" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    adb shell am start -a android.intent.action.VIEW -d "notesapp://notes/2" com.myapp.notes

    这个 noteId 都不存在 NoteDetailFragmentArgs.fromBundle(arguments).noteId arguments?.getInt("noteId", 0) 0 两种情况下都返回)

    打印出包显示它在那里:

    [{android-support-nav:controller:deepLinkIntent=Intent { act=android.intent.action.VIEW dat=notesapp://notes/2 flg=0x1000c000 pkg=com.mynotes.notes cmp=com.mynotes.notes.presentation.MainActivity }, noteId=2}]

    如果deeplinkuri是 http://www.mynotes.com/notes/2

    注释ID 什么时候进行深度链接?谢谢!

    3 回复  |  直到 6 年前
        1
  •  9
  •   ianhanniballake    6 年前

    根据 this issue arguments

    arguments?.getString("noteId")?.toInt()

        2
  •  1
  •   Community George Stocker    4 年前

    问题已在中解决android.arch.导航1.0.0-09。

    漏洞修补

    参数现在从深度链接正确解析为正确的argType,而不是始终作为字符串 b/110273284

    Arch Components发行说明: https://developer.android.com/jetpack/docs/release-notes

        3
  •  0
  •   Ray Li Farhana Naaz Ansari    5 年前

    Android导航库将 将占位符参数解析为字符串,除非该类型在导航图中显式声明为参数。

    的占位符 {noteId} ,通过将参数声明为整数来接收作为整数传递的参数。

    <argument
        android:name="id"
        app:argType="integer"
        android:defaultValue="0" />