实现这个功能搞了好长时间,记录一下。
问题:动态数据,有数据没效果
//关联TabLayout与ViewPage2
TabLayoutMediator(normalTabs, normalViewPager) { tab, position ->
tab.text = names[position].name
}.attach()
如果你也遇到这个问题,你先创建一组静态数据试试
参考 : TabLayout和ViewPager2的简单使用
关键点:在ViewPage的绑定数据
class FragmentAdapter(activity: FragmentActivity, val list: MutableList<TreeListData.Children>) :
FragmentStateAdapter(activity) {
private var fragments = mutableListOf<Fragment>()
var title = ""
override fun getItemCount(): Int {
//暂时想到的是这样的解决方式
if (fragments.size != list.size) {
list.forEach {
fragments.add(NormalFragment.newInstance(it.id, title))
}
}
return fragments.size
}
override fun createFragment(position: Int): Fragment = fragments[position]
}
上面那种在getItemCount中创建数据总觉得不行,昨晚想起来我们可以自己创建一个方法来更新数据并管理它,也符合封装思想,以下就是我认为最佳的解决方法:创建方法 setList()
class FragmentAdapter(activity: FragmentActivity) :FragmentStateAdapter(activity) {
var fragments = mutableListOf<Fragment>()
var title = ""
@SuppressLint("NotifyDataSetChanged")
fun setList(list: List<TreeListData>) {
if (fragments.size != list.size) {
fragments.clear()
if (!list.isNullOrEmpty()) {
list.forEach {
fragments.add(NormalFragment.newInstance(it.id, title))
}
}
}
notifyDataSetChanged()
}
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment = fragments[position]
}