我这个项目中用的是ViewPager2,但是和ViewPager应该差不多。
项目中有这么一个需求:在ViewPager中的Fragment中分别显式状态栏上的menu。有的Fragment上不显示,有的显示,状态栏在ViewPager外。经过我的整理结果如下。
我的项目ViewPager2也是在一个Fragment中的,所以 onCreateView中添加
setHasOptionsMenu(true) //不是在Fragment中的不用加这个。
viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageSelected(position: Int) {……}
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
requireActivity().invalidateOptionsMenu() //重点
}
}
重写方法
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.course_menu, menu)
//逻辑的操作
if (viewPager.currentItem == 1) {
menu.findItem(R.id.refresh_course).setVisible(true)
} else {
menu.findItem(R.id.refresh_course).setVisible(false)
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
//解决点击左上角按钮失效的问题
android.R.id.home -> return super.onOptionsItemSelected(item)
//点击menu的item
R.id.refresh_course -> courseViewModel.clearCourse(
mainViewModel.authenticationState == MainViewModel.AuthenticationState.AUTHENTICATED)
}
return true
}