Навигация по архитектуре Android - onSupportNavigateUp () - PullRequest
0 голосов
/ 16 мая 2018

При использовании библиотеки навигации можно ли завершить внутреннюю деятельность с помощью finish() в onSupportNavigateUp()?Или мы должны использовать NavController, чтобы удалить Activity из стека?И у меня возникли проблемы с использованием NavController для удаления Activity.

Мой график навигации выглядит следующим образом:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    app:startDestination="@id/home_frag">

    <fragment
        android:id="@+id/home_frag"
        android:name="com.yamikrish.app.slicedemo.ui.home.HomeFragment"
        android:label="home_frag"
        tools:layout="@layout/home_fragment">

        <action
            android:id="@+id/open_details"
            app:destination="@id/details_fragment" />

    </fragment>

    <activity
        android:id="@+id/details_fragment"
        android:name="com.yamikrish.app.slicedemo.ui.detail.DetailActivity"
        android:label="@string/post_detail"
        tools:layout="@layout/detail_page">

        <argument
            android:name="id"
            app:type="integer" />

    </activity>

    <fragment
        android:id="@+id/profile_frag"
        android:name="com.yamikrish.app.slicedemo.ui.profile.ProfileFragment"
        android:label="@string/profile"
        tools:layout="@layout/profile_fragment" />
</navigation>

Я пытался использовать, как показано ниже:

(i) Использование NavController внутри DetailActivity

override fun onSupportNavigateUp(): Boolean {
        val nav = NavController(this)
        return  nav.navigateUp()
}

Но получается исключение как,

java.lang.IllegalArgumentException: задний стек NavController пуст

(ii) Использование NavController внутри BaseActivity

 override fun onSupportNavigateUp(): Boolean {
            return  findNavController(R.id.container).navigateUp()
    }

Это также не работает.Я делаю это неправильно?

1 Ответ

0 голосов
/ 12 июля 2018

В этом случае ваше детальное действие не имеет понятия родительского навигационного графа.Ваш пример ii правильный.Так как BaseActivity содержит навигационный граф.Я не знаю, что делает DetailActivity, но если он также содержит граф навигации, то вы должны использовать тот же код, что и BaseActivity.Тот факт, что вы получаете эту ошибку, а также создаете новый NavController на лету, говорит мне, что DetailActivity не использует граф навигации (создание нового NavController и не предоставление его с графиком по умолчанию будет инициализироваться с пустым задним стеком).

Таким образом, onSupportNavigateUp DetailActivity должен вести себя как обычная навигация вверх.Если есть четкий родитель, вы должны запустить его, в противном случае просто finish ().

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