Kotlin 包返回 null
Kotlin bundle returning null
我无法在我的目标片段中获取包(参数)值,总是 return null。
navigation file
已评论。
<fragment
android:id="@+id/nav_home"
android:name="com.my.app.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home" >
<argument android:name="projectSlugArgument" />
<action
android:id="@+id/action_nav_home_to_projectDetailsFragment"
app:destination="@id/projectDetailsFragment" />
<argument android:name="searchArgument" /> // <------- sending argument
<action
android:id="@+id/action_nav_home_to_searchFragment"
app:destination="@id/searchFragment" />
</fragment>
<fragment
android:id="@+id/projectDetailsFragment"
android:name="com.my.app.ui.ProjectDetails.ProjectDetailsFragment"
android:label="fragment_project_details"
tools:layout="@layout/fragment_project_details">
<argument android:name="projectSlugArgumentValue"
app:argType="com.my.app.classes.slugArg" />
/>
</fragment>
<fragment
android:id="@+id/searchFragment"
android:name="com.my.app.ui.search.SearchFragment"
android:label="fragment_search"
tools:layout="@layout/fragment_search">
// <------- receiving argument --------->
<argument android:name="searchArgumentValue"
app:argType="com.my.app.classes.slugArg" />
</fragment>
sending argument
private fun search(input: String) {
val bundle = bundleOf("searchArgument" to input)
navController.navigate(R.id.action_nav_home_to_searchFragment, bundle)
Log.d("eeet", input) // has data in Logcat
}
receiving data
lateinit var searchArgument: String
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_search, container, false)
searchArgument = activity?.intent?.extras?.getString("searchArgument").toString()
Log.d("eeee", searchArgument) // retuning null in Logcat
return root
}
您正在尝试访问此处的活动参数。您需要做的是访问片段参数,这可以通过 Fragment.getArguments()
.
完成
不过,我建议您更深入地了解导航组件。不建议手动处理参数,而是使用 directions.
导航组件有一个名为 Safe Args 的 Gradle 插件,它生成简单的对象和构建器 类,用于类型安全的导航和访问任何关联的参数。强烈建议使用 Safe Args 来导航和传递数据,因为它可以确保类型安全。
有关如何为 Kotlin 添加安全参数的信息,请参阅上面的 link。完成后,您的代码将如下所示:
发送中:
private fun search(input: String) {
val action = HomeFragmentDirections.action_nav_home_to_searchFragment(input)
navController.navigate(action)
Log.d("eeet", input)
}
正在接收:
private val args: SearchFragmentArgs by navArgs()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_search, container, false)
Log.d("eeee", args.searchArgumentValue)
return root
}
我无法在我的目标片段中获取包(参数)值,总是 return null。
navigation file
已评论。
<fragment
android:id="@+id/nav_home"
android:name="com.my.app.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home" >
<argument android:name="projectSlugArgument" />
<action
android:id="@+id/action_nav_home_to_projectDetailsFragment"
app:destination="@id/projectDetailsFragment" />
<argument android:name="searchArgument" /> // <------- sending argument
<action
android:id="@+id/action_nav_home_to_searchFragment"
app:destination="@id/searchFragment" />
</fragment>
<fragment
android:id="@+id/projectDetailsFragment"
android:name="com.my.app.ui.ProjectDetails.ProjectDetailsFragment"
android:label="fragment_project_details"
tools:layout="@layout/fragment_project_details">
<argument android:name="projectSlugArgumentValue"
app:argType="com.my.app.classes.slugArg" />
/>
</fragment>
<fragment
android:id="@+id/searchFragment"
android:name="com.my.app.ui.search.SearchFragment"
android:label="fragment_search"
tools:layout="@layout/fragment_search">
// <------- receiving argument --------->
<argument android:name="searchArgumentValue"
app:argType="com.my.app.classes.slugArg" />
</fragment>
sending argument
private fun search(input: String) {
val bundle = bundleOf("searchArgument" to input)
navController.navigate(R.id.action_nav_home_to_searchFragment, bundle)
Log.d("eeet", input) // has data in Logcat
}
receiving data
lateinit var searchArgument: String
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_search, container, false)
searchArgument = activity?.intent?.extras?.getString("searchArgument").toString()
Log.d("eeee", searchArgument) // retuning null in Logcat
return root
}
您正在尝试访问此处的活动参数。您需要做的是访问片段参数,这可以通过 Fragment.getArguments()
.
不过,我建议您更深入地了解导航组件。不建议手动处理参数,而是使用 directions.
导航组件有一个名为 Safe Args 的 Gradle 插件,它生成简单的对象和构建器 类,用于类型安全的导航和访问任何关联的参数。强烈建议使用 Safe Args 来导航和传递数据,因为它可以确保类型安全。
有关如何为 Kotlin 添加安全参数的信息,请参阅上面的 link。完成后,您的代码将如下所示:
发送中:
private fun search(input: String) {
val action = HomeFragmentDirections.action_nav_home_to_searchFragment(input)
navController.navigate(action)
Log.d("eeet", input)
}
正在接收:
private val args: SearchFragmentArgs by navArgs()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_search, container, false)
Log.d("eeee", args.searchArgumentValue)
return root
}