tal*_*aul 2 android google-maps android-mapview xamarin android-recyclerview
我有一个Android.Support.V4.Fragment包含a MapView和a的RecyclerView.这些是单独的观点Fragment.
设备旋转时应用程序崩溃:
Android.OS.BadParcelableException:解组时的ClassNotFoundException:android.support.v7.widget.RecyclerView $ SavedState
我按照文档的要求将生命周期方法传递给MapView:
private MapView mapView;
private RecyclerView myRecyclerView;
private RecyclerView.LayoutManager myLayoutManager;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
myRecyclerView = myRootView.FindViewById<RecyclerView>(Resource.Id.myRecyclerView);
myLayoutManager = new LinearLayoutManager(activity, LinearLayoutManager.Horizontal, false);
myRecyclerView.SetLayoutManager(myLayoutManager);
myRecyclerAdapter = ...
myRecyclerView.SetAdapter(myRecyclerAdapter);
mapView.OnCreate(savedInstanceState);
}
public override void OnSaveInstanceState(Bundle outState)
{
...
if (mapView != null) mapView.OnSaveInstanceState(outState);
base.OnSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
如果我删除RecyclerView表单AXML它正确旋转,如果我包含它应用程序崩溃mapView.OnCreate(savedInstanceState)为什么这?
对于任何搜索并具有相同问题的人.这是解决方案,它似乎是一个2岁的bug.
我能够通过将MapView的保存状态保存在单独的Bundle上然后将其添加到传出的已保存状态包中来解决它.然后
onCreate(),我将从传入的一个中获取MapView的保存状态并将其传递给它的onCreate()方法,从而停止崩溃.
在我的情况下,我实现如此:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
myRecyclerView = myRootView.FindViewById<RecyclerView>(Resource.Id.myRecyclerView);
myLayoutManager = new LinearLayoutManager(activity, LinearLayoutManager.Horizontal, false);
myRecyclerView.SetLayoutManager(myLayoutManager);
myRecyclerAdapter = ...
myRecyclerView.SetAdapter(myRecyclerAdapter);
Bundle mapViewSavedInstanceState = savedInstanceState != null ? savedInstanceState.GetBundle("mapViewSaveState") : null;
mapView.OnCreate(mapViewSavedInstanceState);
}
public override void OnSaveInstanceState(Bundle outState)
{
if (mapView != null)
{
Bundle mapViewSaveState = new Bundle(outState);
outState.PutBundle("mapViewSaveState", mapViewSaveState);
mapView.OnSaveInstanceState(outState);
}
base.OnSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |