Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

反馈个bug,我用viewpager2,从kotlin-android-extensions改成这个框架报错 #21

Open
shenyunhuan opened this issue Mar 16, 2021 · 4 comments

Comments

@shenyunhuan
Copy link

先是报错 FragmentManager is already executing transactions
然后我改了FragmentStateAdapter的条件
报错变成了Fragment no longer exists
但是FragmentStateAdapter saveState是final方法 和viewpager2 也是final class
所以我还原代码kotlin-android-extensions的写法就没有报错了
我应用的UI是下面三个tab,一个tab用viewpager2包两个 Fragment
在tab上切来切去就报错

@hi-dhl
Copy link
Owner

hi-dhl commented Mar 16, 2021

@shenyunhuan 非常感谢你的反馈,我会尽快修复,有两个几个问题咨询一下:

  1. 「 viewpager2 包含 两个 Fragment 」 在 viewpager2 之间滑动有问题吗?
  2. 在 tab 上切来切去,我理解的是 包含 viewpager2 的页面 和 不包含 viewpager2 的页面,它们之间互相切换会报错

@shenyunhuan
Copy link
Author

@shenyunhuan 非常感谢你的反馈,我会尽快修复,有两个几个问题咨询一下:

  1. “ viewpager2包含两个片段”在viewpager2之间滑动有问题吗?
  2. 在tab上切来切去,我理解的是是包含viewpager2的页面和不包含viewpager2的页面,它们之间互相切换会报错

1、在一个Tab内,滑动无问题,
2、我有四个Tab,左边两个tab包含viewpager2的页面,右边不包含,没有从第一个Tab的第二个Fragment滑到第二个Tab的联动效果,只有一个包含了viewpager2的Tab改造了,但切到这个页面切来切去就报错

@hi-dhl
Copy link
Owner

hi-dhl commented Mar 17, 2021

大概理解了你的意思,我写个 demo 试试看

@hi-dhl
Copy link
Owner

hi-dhl commented Apr 10, 2021

@shenyunhuan 非常感谢你的反馈,我会尽快修复,有两个几个问题咨询一下:

  1. “ viewpager2包含两个片段”在viewpager2之间滑动有问题吗?
  2. 在tab上切来切去,我理解的是是包含viewpager2的页面和不包含viewpager2的页面,它们之间互相切换会报错

1、在一个Tab内,滑动无问题,
2、我有四个Tab,左边两个tab包含viewpager2的页面,右边不包含,没有从第一个Tab的第二个Fragment滑到第二个Tab的联动效果,只有一个包含了viewpager2的Tab改造了,但切到这个页面切来切去就报错

你好,我按照你说的,写了一个 demo:

  1. 底部有三个 tab
  2. 其中一个 tab 包含 ViewPager2
  3. ViewPager2 嵌套 2 个 Fragment

滑动并没有出现问题:

demo 体验入口地址: 「第一个 Activity」 -> 「 ViewBinidng示例」 -> 「 在 ViewPager2 中使用」 可以滑动体验一下

代码地址如下所示,如果有时间,辛苦看一下,是否和你的架构一致

class ViewPager2Activity : AppCompatActivity(), View.OnClickListener {
val binding: ActivityViewpagerBinding by viewbind()
var fragment1: Fragment1 = Fragment1()
var fragment2: Fragment2 = Fragment2()
var fragment3: Fragment3 = Fragment3()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
with(binding) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(R.id.container, fragment3)
fragmentTransaction.add(R.id.container, fragment2)
fragmentTransaction.add(R.id.container, fragment1)
hideFragment(fragmentTransaction)
fragmentTransaction.show(fragment1)
fragmentTransaction.commit()
getViews().forEach {
it.setOnClickListener(this@ViewPager2Activity)
}
}
}
private fun getViews() = with(binding) {
arrayListOf<View>(
tab1,
tab2,
tab3
)
}
companion object {
fun startActivity(activity: Activity) {
activity.startActivity(Intent(activity, ViewPager2Activity::class.java))
}
}
override fun onClick(v: View) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
hideFragment(fragmentTransaction)
with(binding) {
when (v) {
tab1 -> {
fragmentTransaction.show(fragment1)
}
tab2 -> {
fragmentTransaction.show(fragment2)
}
tab3 -> fragmentTransaction.show(fragment3)
else -> {
}
}
}
fragmentTransaction.commitNow()
}
private fun hideFragment(fragmentTransaction: FragmentTransaction) {
getViews().forEach {
fragmentTransaction.hide(fragment1)
fragmentTransaction.hide(fragment2)
fragmentTransaction.hide(fragment3)
}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants