Как начать второе действие с навигацией в Jetpack - PullRequest
0 голосов
/ 30 мая 2018

Вы знаете, что теперь это официально: Google официально рекомендует архитектуру приложения для одного действия.Но здесь есть трудности.У нас есть все несколько мероприятий.Поэтому, когда я хочу реализовать Навигацию с несколькими действиями, но у меня ничего не получилось.

Они сказали: В случаях, когда несколько видов деятельности используют один и тот же макет, графики навигации можно объединять, заменяя вызовы навигации для назначения действия для навигации.звонки прямо между двумя навигационными графами. здесь

Итак, я создаю это:

<?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"
app:startDestination="@+id/nav_graph_firstActvity">

<activity
    android:id="@+id/nav_graph_firstActvity"
    android:name="io.androidedu.FirstActivity"
    android:label="First Activity">

    <action
        android:id="@+id/nav_graph_actFirstActvity"
        app:destination="@id/nav_graph_secondActvity" />
</activity>

<activity
    android:id="@+id/nav_graph_secondActvity"
    android:name="io.androidedu.SecondActivity"
    android:label="Second Activity" />

После этого я не могу найти образец для нескольких действий здесь. Есть такой пример:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

Но findNavController () ожидает просмотра, а не действия.

Как я могу решить эту проблему?

Ответы [ 2 ]

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

Навигация предназначена для помощи в навигации по фрагментам, поскольку они упоминают это в примечании синего цвета здесь

Примечание. Компонент архитектуры навигации предназначен для приложений, которые имеют одно основное действие с несколькими местами назначения фрагментов .Основным видом деятельности «хостов» является навигационный график.В приложении с несколькими адресатами действий каждый дополнительный вид деятельности содержит свой собственный график навигации.Изменение действия для навигации по хосту обсуждается далее в этом документе.

Итак, что вы можете сделать, это использовать Activity в качестве места назначения в nav_graph1.xml, и это Activity (место назначения) должно иметьсвой собственный nav_graph2.xml.Таким образом, вы продолжаете использовать Навигацию как способ просмотра своего приложения.

Это правда, что в документации Google, которую вы упоминаете при использовании нескольких Активов, которые используют один и тот же макет, это немного сбивает с толку.Но я думаю, что они имеют в виду, что вы можете объединить Activity1 с Fragment1 (nav_graph1.xml) и Activity2 с Fragment2 (nav_graph2.xml) в Activity3 с (Fragment1 и Fragment2), так как они используют один и тот же макет, и вы можете использовать nav_graph.xml, указывающий на nav_graph2.xml

Надеюсь, это поможет

Обновление:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

Представление может быть любым представлением внутри макета, содержащим NavHostFragment.Он будет искать соответствующий файл nav_graph.xml, соответствующий этому представлению или всем его родителям.

0 голосов
/ 30 мая 2018

Не помещайте несколько действий в один XML-файл навигации.Навигация предназначена для решения навигации в действии, то есть она поддерживает только фрагменты изящно.Чтобы начать другое занятие, просто сделайте это по-старому, как context.startActivity(intent).Вы можете найти более подробную информацию в этом примере Google:

https://github.com/googlesamples/android-sunflower

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