Компонент Навигационной Арки: Передача параметра-заполнителя для Deeplink - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь реализовать функциональность Deeplink, используя новый API компонента навигации v1.0.0-alpha05, но сталкиваюсь с проблемой.

Использование Android Studio 3.3 Canary 7

Часть моего navigation_graph.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}]

Та же проблема наблюдается, если значение URI для DeepLink http://www.mynotes.com/notes/2

Как получить доступ к noteId при глубоких ссылках? Спасибо!

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Проблема была исправлена ​​в android.arch.navigation 1.0.0-alpha09.

Исправления ошибок

Аргументы теперь правильно анализируются из глубоких ссылок как правильный argType, а не всегда как строки b / 110273284

Компоненты Arch Примечания к выпуску: https://developer.android.com/jetpack/docs/release-notes

0 голосов
/ 26 февраля 2019

Библиотека навигации Android будет всегда анализировать параметры заполнителя как строки, если тип явно не объявлен в графике навигации как аргумент.

Для заполнителя {noteId} получите переданный параметр как целое число, объявив аргумент как целое число.

<argument
    android:name="id"
    app:argType="integer"
    android:defaultValue="0" />
0 голосов
/ 05 сентября 2018

В соответствии с этой проблемой аргументы, проанализированные из глубоких ссылок, добавляются только в arguments Bundle в виде строк.

Поэтому вы должны получить noteId через arguments?.getString("noteId")?.toInt(), пока эта проблема не будет устранена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...