【发布时间】:2017-12-29 08:46:35
【问题描述】:
我试图判断用户何时在我的导航抽屉中选择了不同的片段。我正在尝试使用
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 中。就像这样,您无需尝试从 Fragment 的状态猜测它就可以知道显示或不显示什么。但是你确定你的 Fragment A 没有显示 btw 吗?你能得到导航抽屉监听器的代码吗?
-
请贴更多代码,你在哪里调用这个函数?你的活动是什么样的?
-
@Eselfar 我已经添加了更多关于为什么我需要它的信息。
-
那么为什么不在 Fragment 的
onPause中调用.stop呢?还是不明白你的问题。 -
如何切换片段?
标签: android android-layout android-fragments kotlin android-view