Android 为什么我的活动中的进度条没有';按下硬件后退按钮后,我的片段中是否显示?
所以我在Android中使用导航控制器组件。在我的Android 为什么我的活动中的进度条没有';按下硬件后退按钮后,我的片段中是否显示?,android,android-architecture-components,android-navigation,android-architecture-navigation,android-jetpack-navigation,Android,Android Architecture Components,Android Navigation,Android Architecture Navigation,Android Jetpack Navigation,所以我在Android中使用导航控制器组件。在我的MainActivity中有一个进度条,当用户从服务器获取数据时需要等待时,它将用于我的所有片段 在myonCreateMainActivity中,声明如下: progressBar = findViewById(R.id.progressBar_main_activity) 在myFragmentA中,声明如下: lateinit var mActivity : FragmentActivity lateinit var progressBa
MainActivity
中有一个进度条,当用户从服务器获取数据时需要等待时,它将用于我的所有片段
在myonCreate
MainActivity
中,声明如下:
progressBar = findViewById(R.id.progressBar_main_activity)
在myFragmentA
中,声明如下:
lateinit var mActivity : FragmentActivity
lateinit var progressBar : ProgressBar
override fun onAttach(context: Context) {
super.onAttach(context)
activity?.let {
mActivity = it
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
fragmentView = inflater.inflate(R.layout.fragment_user_control, container, false)
progressBar = mActivity.progressBar_main_activity
return fragmentView
}
override fun onResume() {
super.onResume()
progressBar.visibility = View.VISIBLE
}
假设我有两个碎片
我从FragmentA
导航到FragmentB
。使用下面的代码
val eventDetailDestination = UserControlFragmentDirections.actionGlobalDestinationEventDetail(selectedEvent)
Navigation.findNavController(fragmentView).navigate(eventDetailDestination)
在FragmentB
中,用户在FragmentB
中执行一些操作后,需要返回到FragmentA
问题是
如果用户使用操作栏/工具栏左上角的“后退”按钮从FragmentB
返回到FragmentA
,则FragmentA
中的进度栏将显示出来
但是,如果用户使用右下角的硬件返回按钮返回,则片段a
中的进度条将永远不会显示。即使我确信progressBar.visibility=View.visibility
已在FragmentA
中执行
我试着阅读工具栏上的后退按钮和硬件后退按钮之间的区别。但我不知道为什么会这样。请帮助:)发生这种情况的原因是,当使用“硬件后退”按钮时,fragmentA将被删除并从头开始重新创建,这是预期的结果。您可以覆盖默认行为,如下所示: 主要活动
override fun onSupportNavigateUp(): Boolean {
//Use component backstack pop
return Navigation.findNavController(fragmentView).navigateUp()
}
再亮一点
向上vs.向后
“向上”按钮用于在应用程序中基于
屏幕之间的层次关系。例如,如果屏幕A
显示项目列表,选择项目将进入屏幕B
(更详细地显示该项目),然后屏幕B应提供
返回到屏幕A的向上按钮
如果某个屏幕是某个应用程序(即该应用程序的主页)中最上面的一个屏幕,则
不应显示向上按钮
系统后退按钮用于按逆时间顺序导航
顺序,通过用户最近工作的屏幕历史记录
具有它通常基于
屏幕,而不是应用程序的层次结构
当先前查看的屏幕也是的层次父级时
在当前屏幕上,按下后退按钮的结果与
按向上按钮这是常见的情况。然而,与
“向上”按钮,确保用户仍在您的应用程序中
按钮可以将用户返回到主屏幕,甚至返回到另一个屏幕
应用程序
参考:
你到底想要什么?你想让进度条带有“硬件后退”按钮,还是想在用户单击“actoin bar back”按钮时删除进度条?为什么不在片段A的恢复中显示进度条?@VinayJayaram我想在用户从片段B使用“硬件后退”按钮时显示我的进度条(在片段A中)FragmentA@Sandeepdhiman对我已将progressBar.visibility=View.VISIBLE移动到onResume,但它仍然没有移动show@Overridepublic void onBackPressed(){super.onBackPressed();//show progressbar finish();}非常感谢您,但是,您确定MainActivity中使用了该代码吗?Navigation.findNavController(fragmentView.navigateUp())中的“fragmentView”是什么???因为我在MainActivity中没有fragmentView属性。这是对代码的引用:应该像这样=>findNavController(R.id.my_nav_host_fragment)。navigateUp()很抱歉,类型不匹配,如下所示:尝试
findNavController(this@MainActivity,R.id.my_nav_host_fragment)
将您的活动作为第一个参数传递我真的很抱歉,但是进度条仍然没有出现:(