Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的活动中的进度条没有';按下硬件后退按钮后,我的片段中是否显示?_Android_Android Architecture Components_Android Navigation_Android Architecture Navigation_Android Jetpack Navigation - Fatal编程技术网

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

所以我在Android中使用导航控制器组件。在我的
MainActivity
中有一个进度条,当用户从服务器获取数据时需要等待时,它将用于我的所有片段

在my
onCreate
MainActivity
中,声明如下:

progressBar = findViewById(R.id.progressBar_main_activity)
在my
FragmentA
中,声明如下:

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)
将您的活动作为第一个参数传递我真的很抱歉,但是进度条仍然没有出现:(