【已解决】 BottomNavigationView点击两次才会进行切换
如题,点击底部导航栏的item时,需要点击两次才会进行fragment的切换,代码如下:
class MainActivity : AppCompatActivity() {
private val TAG = " MainActivity "
private lateinit var _binding : ActivityMainBinding
private val binding get() = _binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 打开默认第一页
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP1))
// 监听事件
initListener()
logD(TAG," onCreate() ")
}
// 监听事件
private fun initListener() {
// 监听底部导航栏的点击事件
binding.bottomNavigationBar.setOnNavigationItemReselectedListener {
when(it.itemId){
R.id.bottom_one -> {
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP1))
logD(TAG,"one")
}
R.id.bottom_two -> {
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP2))
logD(TAG,"two")
}
R.id.bottom_three -> {
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP3))
logD(TAG,"three")
}
R.id.bottom_four -> {
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP4))
logD(TAG,"four")
}
}
}
}
// 切换Fragment, 传入Fragment实例参数
private fun switchFragment(fragment: Fragment?) {
val supportFragmentManager = supportFragmentManager
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.main_container, fragment!!)
transaction.commit()
}
}
class FragmentCreator {
companion object{
const val INDEX_TOP1 = 1
const val INDEX_TOP2 = 2
const val INDEX_TOP3 = 3
const val INDEX_TOP4 = 4
private val top1: HomeFragment by lazy {
HomeFragment.instance
}
private val top2: Top2Fragment by lazy {
Top2Fragment.instance
}
private val top3: Top3Fragment by lazy {
Top3Fragment.instance
}
private val top4: Top4Fragment by lazy {
Top4Fragment.instance
}
fun getFragment(index: Int): Fragment?{
when(index){
INDEX_TOP1 -> {
return top1
}
INDEX_TOP2 -> {
return top2
}
INDEX_TOP3 -> {
return top3
}
INDEX_TOP4 -> {
return top4
}
}
return null
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBackground">
<FrameLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
app:labelVisibilityMode="labeled"
app:itemTextColor="@drawable/selected_color"
android:layout_alignParentBottom="true"
app:menu="@menu/my_navigation_items"/>
</RelativeLayout>
其余Fragment类似
class HomeFragment: Fragment() {
private lateinit var _binding:FragmentHomeBinding
private val binding get() = _binding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentHomeBinding.inflate(layoutInflater,container,false)
return binding.root
}
companion object{
val instance = HomeFragment()
}
}
监听器设置错了,setOnNavigationItemReselectedListener,你设置的是重选监听器,SetOnNavigationItemSelectedListener就行了