【发布时间】:2021-07-04 12:16:17
【问题描述】:
今天,我在我的应用程序中发现了一个非常奇怪的错误。它如下:当用户导航到“个人资料屏幕”,然后打开“信息屏幕”,然后单击“agb”,我的应用程序打开浏览器并将用户导航到我的网站。现在奇怪的事情:当用户导航回来(到“信息屏幕”,底部导航表明他当前在主页选项卡上。再次导航回来(到“个人资料屏幕”),然后解决了这个问题。所以它去:
“个人资料屏幕”->“信息屏幕”->单击链接->“打开浏览器” -> 单击返回 -> 状态丢失 -> “信息屏幕” -> 单击返回 -> 状态恢复 -> “配置文件屏幕”。
我添加了一些显示错误的图片(红色表示状态,蓝色表示动作)
导航
- Profile Screen (correct state)
- Information Screen (correct state)
- Browser (Probably state destroyed now)
- Information Screen (state destroyed)
- Profile Screen (state restored)
片段(信息屏幕)
class UserInformationFragment : Fragment(R.layout.fragment_user_information) {
private var _binding: FragmentUserInformationBinding? = null
private val binding: FragmentUserInformationBinding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentUserInformationBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initUserToolbar()
with(binding) {
agbCv.setOnClickListener { startBrowser(INTERNET_AGB) }
dataProtectionCv.setOnClickListener { startBrowser(INTERNET_DATA_PROTECTION) }
impressumCv.setOnClickListener { startBrowser(INTERNET_IMPRESSUM) }
}
}
private fun startBrowser(url: String) {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(browserIntent)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
我的一个想法是在用户导航返回后再次手动将状态设置为配置文件屏幕。但这将是一个真正的混乱和奇怪的做法..
导航版
navigation_version = 2.3.5
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
【问题讨论】:
-
我认为你必须使用深层链接!
-
@miladsalimi 打开浏览器?
-
不,我们设置
Intent用于打开浏览器,从该URL 返回到特定片段,您应该设置深层链接。 -
@miladsalimi 你能给我介绍一个例子吗?我不熟悉深层链接的概念。我特别不知道把这段代码放在哪里(应用程序或活动?)
-
你在使用导航组件吗?
标签: android kotlin android-architecture-navigation android-navigation