【发布时间】:2019-08-14 12:54:11
【问题描述】:
我最近遇到了一个非常奇怪的问题。 我的布局中有一个地图视图,它使用数据绑定进行了膨胀。 在我将 ViewPager2 添加到我的布局后,我遇到了这个问题:
java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class androidx.recyclerview.widget.RecyclerView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/0x1. Make sure other views do not use the same id.
但只有当您首先打开第一个片段并转到下一个片段然后按返回时才会发生这种情况。
- 如果我从布局中删除 mapview,一切正常。
- 如果我从布局中删除 viewpager2,一切正常。
- 如果我删除数据绑定一切正常。
它似乎与视图状态有关,但我能做些什么来解决这个问题吗?
这是一个示例片段代码:
class TestFragment(override val layoutRes: Int = R.layout.fragment_test) : BaseFragment() {
lateinit var binding: FragmentTestBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentTestBinding.inflate(inflater, container, false)
setupMap(savedInstanceState)
return binding.root
}
override fun onResume() {
super.onResume()
binding.mapView.onResume()
}
override fun onPause() {
super.onPause()
binding.mapView.onPause()
}
private fun setupMap(savedInstanceState: Bundle?) {
binding.mapView.onCreate(savedInstanceState)
binding.mapView.onResume()
binding.mapView.getMapAsync { }
}
}
示例布局:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</layout>
要重现,我必须打开另一个片段,然后按返回
**编辑:** 似乎在 mapview 前面移动 viewpager 也有帮助,所以仍然可以使用数据绑定。
【问题讨论】:
-
您好,您找到问题的原因了吗?这个问题让我抓狂:S
-
@lelloman,我想我最终使用了旧的查看器。很高兴看到您找到了不同的解决方案:)
-
遇到了同样的问题,请问您找到解决方案了吗?目前我看到的唯一解决方案是使用 ViewPager 而不是 ViewPager2 ...
-
奇怪,当我将 viewPager2 放在地图后面时,它可以工作,但是由于 mapView 覆盖了 VP2...
标签: android android-mapview android-databinding android-viewpager2