我試圖告訴用戶何時在我的導航抽屜中選擇不同的片段。我試圖用如何判斷片段在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我已經添加了更多的信息,爲什麼我需要它這樣。 –