Android 如何从SafeArgs中的资源中获取默认字符串值?
我正在学习Android NavigationUI,并尝试使用安全参数中的字符串默认值设置工具栏标题。但是我有一些问题 “字符串资源”文件:Android 如何从SafeArgs中的资源中获取默认字符串值?,android,string,androidx,android-navigation,android-safe-args,Android,String,Androidx,Android Navigation,Android Safe Args,我正在学习Android NavigationUI,并尝试使用安全参数中的字符串默认值设置工具栏标题。但是我有一些问题 “字符串资源”文件: <string name="title_add_item">Add new items</string> 如果{app:argType=“string”}我收到一个错误: Caused by: org.xmlpull.v1.XmlPullParserException: unsupported value 'Add n
<string name="title_add_item">Add new items</string>
如果{app:argType=“string”}
我收到一个错误:
Caused by: org.xmlpull.v1.XmlPullParserException: unsupported value 'Add new items' for string. You must use a "reference" type to reference other resources.
如果{app:argType=“reference”}
应用程序工作,但我在标题中有一个数字(我认为这是一个资源id):
当然,我可以通过从参数中获取工具栏标题的值来在代码中指定工具栏标题的值。但是,是否可以更改此代码以便正确填写标题?请查看
您不需要使用参数来设置静态标题。
您可以使用android:label
将要在工具栏中显示的标题设置为导航图中的片段
<fragment
android:id="@+id/addNewItemFragment"
android:name="com.myapplication.AddNewItemFragment"
android:label="@string/title_add_item"
tools:layout="@layout/fragment_add_new_item" >
这样,您就不需要覆盖SupportNavigateUp上的,一旦导航到另一个片段,标题将自动更新
如果出于某种原因,您确实希望将参数与android:label
中的值组合在一起,那么除了在代码中使用app:argType=“reference”
并将两者组合在一起之外,别无他法
仅在引用类型中支持对资源的引用。使用
任何其他类型中的资源引用都会导致异常
请随时启动现有问题:。目前,您可以使用app:argType=“string”
对字符串值进行硬编码,或者尝试以编程方式进行设置,直到解析为止
是的,但想法是如果“defaultValue”saveArg变量未设置,则自动从该变量设置标题。我发现它是一个
<fragment
android:id="@+id/addNewItemFragment"
android:name="com.myapplication.AddNewItemFragment"
android:label="@string/title_add_item"
tools:layout="@layout/fragment_add_new_item" >
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById<Toolbar>(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)