我试图告诉用户何时在我的导航抽屉中选择不同的片段。我试图用如何判断片段在NavigationDrawer中不可见
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
}
我如何在我的MainActivity切换片段:
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
when (item.itemId) {
R.id.nav_camera -> {
// Handle the camera action
val fragment: HomeFragment = HomeFragment()
supportFragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit()
}
R.id.nav_manage -> {
val fragment: SettingFragment = SettingFragment()
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit()
}
R.id.nav_share -> {
onInviteClicked()
}
R.id.nav_send -> {
val emailIntent: Intent = Intent(android.content.Intent.ACTION_SEND)
emailIntent.type = Constants.FEEDBACK_EMAIL_TYPE
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
arrayOf(Constants.FEEDBACK_EMAIL_ADDRESS))
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
Constants.FEEDBACK_EMAIL_SUBJECT)
startActivity(Intent.createChooser(
emailIntent, Constants.FEEDBACK_TITLE))
}
}
val drawer: DrawerLayout = findViewById(R.id.drawer_layout)
drawer.closeDrawer(GravityCompat.START)
return true
}
然而,这似乎并没有得到所谓的。例如,在我的NavigationDrawer
活动中,它显示片段A.用户打开导航抽屉并选择片段B. setUserVisibleHint()
未在片段A中调用,因此我的代码可以知道它不再显示。我需要我的代码在片段A中被隔离,以便知道它何时不显示,因此它可以在某些变量上调用.stop()。这与活动中的onPause()具有相同的用例。
我不明白你的问题。为什么不直接使用导航抽屉?我的意思是,你知道用户已经选择了片段B,所以你知道发生了什么。那么不要把你的逻辑放在Navigation Drawer的onClickListener中。就像那样,你会知道什么是显示或不显示,而不会从片段的状态中猜出它。但是你确定你的片段A不是随便显示的吗? 你有导航抽屉监听器的代码吗? – Eselfar
请发布更多的代码,你在哪里调用这个函数?你的活动是什么样子的? – Derek
@Eselfar我已经添加了更多的信息,为什么我需要它这样。 –