TabLayout+ViewPage2+Fragment动态增加和减少
动态添加和减少fragment
·
TabLayout+ViewPage2+Fragment动态增加和减少
1. viewpager的adapter
private inner class PageFragmentStateAdapter(
fragmentManager: FragmentManager,
lifecycle: Lifecycle
) :
FragmentStateAdapter(fragmentManager, lifecycle) {
private var dataObserver: RecyclerView.AdapterDataObserver? = null
override fun createFragment(position: Int): Fragment {
try {
return sonFragments[position].newInstance()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: java.lang.InstantiationException) {
e.printStackTrace()
}
throw IllegalStateException("创建子页面异常")
}
override fun getItemCount(): Int {
return sonFragments.size
}
override fun getItemId(position: Int): Long {
//动态添加fragment,刷新adapter
//这里重写,才会刷新fragment个数
return sonFragments[position].hashCode().toLong()
}
override fun registerAdapterDataObserver(observer: RecyclerView.AdapterDataObserver) {
dataObserver = observer
super.registerAdapterDataObserver(observer)
}
fun unregisterAdapterDataObserver() {
if (dataObserver != null) {
unregisterAdapterDataObserver(dataObserver!!)
dataObserver = null
}
}
}
2.添加fragment和title
@SuppressLint("NotifyDataSetChanged")
private fun addTabFragment() {
if (titleArray.size == ALL_TAB_TITLE || sonFragments.size == ALL_TAB_TITLE) {
return
}
//tabTitleElement即顶部title数组
titleArray.add(2, tabTitleElement[2])
sonFragments.add(2, MessageOperateFragment::class.java)
pagerAdapter.notifyDataSetChanged()
binding.vpMessage.post {
//刷新title数量
binding.tlMessage.selectTab(binding.tlMessage.getTabAt(mCurrentPosition), false)
}
}
3.减少fragment和title
@SuppressLint("NotifyDataSetChanged")
private fun decreaseTabFragment() {
if (titleArray.size == NO_LOGIN_TAB_TITLE || sonFragments.size == NO_LOGIN_TAB_TITLE) {
return
}
titleArray.removeAt(2)
sonFragments.removeAt(2)
pagerAdapter.notifyDataSetChanged()
binding.vpMessage.post {
binding.tlMessage.selectTab(binding.tlMessage.getTabAt(mCurrentPosition), false)
}
}
更多推荐

所有评论(0)