gpt4 book ai didi

android - 为什么从导航组件版本 1.0.0-alpha09 中删除了 addDefaultArguments()?从 Activity 将 arg 传递给 StartDestination 的 WorkAround 是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:33 26 4
gpt4 key购买 nike

你好,我正在研究导航架构组件,我正在以编程方式为我的 Activity 设置 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
}
}

问题:

我使用上面的代码很长时间了,但我将 android.arch.navigation:navigation 的 gradle 依赖版本从 1.0.0-alpha08 更新为 1.0.0-alpha09 并在下面的代码行中更新后出现编译时错误:

代码:

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

错误:

Unresolved reference: 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 时,一切正常。出于某种原因,谷歌已从 NavDestination 中删除了 addDefaultArguments |在 alpha09 版本中。

有人知道为什么要删除 addDefaultArguments 方法吗?

更新:

将 arg 从 Activity 传递到 StartDestination 的 WorkAround 是什么?

检查 thread有关问题的更多详细信息,基本上我想找到一种方法将参数从托管导航 fragment 的 Activity 发送到我的 startDestination。

1.0.0-alpha09 之前:

只有 Solution我可以找到正在使用 addDefaultArguments()

1.0.0-alpha09 不知道???

如果有解决此问题的方法,请分享!

最佳答案

我检查了源代码,发现在导航目标和参数方面有很多变化。我认为将默认参数传递给导航图的正确方法是这样的:

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

也许有更好的方法,但我没有找到。

关于android - 为什么从导航组件版本 1.0.0-alpha09 中删除了 addDefaultArguments()?从 Activity 将 arg 传递给 StartDestination 的 WorkAround 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53928500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com