【问题标题】:Refresh fragment from ViewPager when specifc tab is selected选择特定选项卡时从 ViewPager 刷新片段
【发布时间】:2021-09-04 14:17:37
【问题描述】:
我想从 ViewPager 刷新片段(SentAtt)。我使用 TabLayout 来检测所选片段,但我不知道如何在选择选项卡时刷新特定片段。
tabLayout!!.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
viewPager.currentItem = tab.position
if(tab.position==1){
val sentAtt:SentAtt
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
【问题讨论】:
标签:
kotlin
android-viewpager
android-tablayout
【解决方案1】:
您可以使用此代码按标签获取片段
tabLayout!!.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
viewPager.currentItem = tab.position
if(tab.position==1){
val fragment =supportFragmentManager.findFragmentByTag("android:switcher:" + R.id.pager +
":"
+
viewPager.currentItem ) as? SentAtt
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
【解决方案2】:
要正确封装您的 Fragment,您不应尝试从 Fragment 外部刷新它。
Viewpager2 和 Viewpager 设置了 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 标志,那么 Fragment 只有在被选中时才会移动到 RESUMED 状态,因此您应该将刷新代码放在 Fragments onResume 方法中。
由于刷新代码在 Fragment 内部,因此您无法确定要刷新哪个 Fragment。