Почему addDefaultArguments () удален из компонента навигации версии 1.0.0-alpha09?Что такое WorkAround для передачи аргумента в StartDestination из Activity? - PullRequest
0 голосов
/ 26 декабря 2018

Здравствуйте, я работаю над компонентом архитектуры навигации и я и настраиваю NavHostFragment для моей деятельности программно.

MainActivity.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/nav_host"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
     />
</android.support.constraint.ConstraintLayout>

MainActiviy.kt :

package com.andor.navigate.demonavigation

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import androidx.navigation.Navigation
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.NavigationUI
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupNavigation()
        NavigationUI.setupActionBarWithNavController(this, NavHostFragment.findNavController(nav_host))

    }

    override fun onSupportNavigateUp(): Boolean = Navigation.findNavController(
        this,
        R.id.nav_host
    ).navigateUp()

    private fun setupNavigation() {
        val navHostFragment = nav_host as NavHostFragment
        val navController = navHostFragment.navController
        val navInflater = navController.navInflater
        val graph = navInflater.inflate(R.navigation.nav_graph)
        graph.addDefaultArguments(intent!!.extras!!) // This is where you pass the bundle data from Activity to StartDestination
        navHostFragment.navController.graph = graph
    }
}

Проблема :

Я давно использую приведенный выше код, но я обновил свою версию зависимости от gradle android.arch.navigation:navigation с 1.0.0-alpha08 до 1.0.0-alpha09 и после обновления в строке кода ниже я получаю ошибку времени компиляции:

код:

graph.addDefaultArguments(intent!!.extras!!) // This is where you pass the bundle data from Activity to StartDestination

ошибка:

Неразрешенная ссылка: addDefaultArguments

зависимость (файл проекта) :

dependencies {

    def nav_version = "1.0.0-alpha09"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
    implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin}
}

Когдая возвращаюсь к навигационной версии 1.0.0-alpha08 все работает нормально. По какой-то причине Google удалил addDefaultArguments из NavDestination в версии alpha09.

У всех есть идеи, почему addDefaultArgumentsметод удален?

ОБНОВЛЕНИЕ:

Что такое WorkAround для передачи arg в StartDestination из Activity?

Проверьте нить , чтобы получить более подробную информацию по этому вопросу. В основном, я хочу найти способ отправить Аргумент на мойstartDestination из моей деятельности, в которой размещен фрагмент навигации.

До 1.0.0-alpha09 :

Только Решение Могу ли я найти использование addDefaultArguments()

после 1.0.0-alpha09 не знаю ???

Если есть какие-либо способы решения этой проблемы, поделитесь!

1 Ответ

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

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

val navHostFragment = nav_host as NavHostFragment
val navController = navHostFragment.navController
val navInflater = navController.navInflater
val graph = navInflater.inflate(R.navigation.nav_graph)
if(intent.extras!=null) {
    val argument1 = intent.extras.get("Key1")
    val argument2 = intent.extras.get("Key1")
    val navArgument1=NavArgument.Builder().setDefaultValue(argument1).build()
    val navArgument2=NavArgument.Builder().setDefaultValue(argument2).build()
    graph.addArgument("Key1",navArgument1)
    graph.addArgument("Key2",navArgument2)
}
navHostFragment.navController.graph = graph

Возможно, есть лучший способ, но я его не нашел.

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