在我的应用程序中,我试图在 ViewPager 内实现地图视图。我的应用程序中有 4 个不同的页面。 MapView在第四页。我确实成功加载了地图,但是当我滑回第一页时,必须使用 destroyItem() 方法销毁第四个视图。如果我刷到第四页,它会从第三页崩溃,并在 logcat 中显示错误:
05-10 13:14:50.152: E/AndroidRuntime(620): java.lang.IllegalStateException: You are only allowed to have a single MapView in a MapActivity
我知道 MapActivity 中只有一个地图视图。但我无法解决它 - 谁能帮助我?
代码如下:
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
context = collection.getContext();
int resId = 0;
int flag = resId;
switch (position) {
case 0:
resId = R.layout.farleft; // first
view = inflater.inflate(resId, null);
break;
case 1:
resId = R.layout.left; // second
view = inflater.inflate(resId, null);
break;
case 2:
resId = R.layout.right; // third
view = inflater.inflate(resId, null);
break;
case 3:
resId = R.layout.mylocator;
view = inflater.inflate(resId, null);
break;
}
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
Log.d("destroyItem", "" + arg2);
}
我已经找到了解决方案。
在包含 Map 并由 ViewPager 使用的片段中,输入:
private View myView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (this.myView == null){
this.myView = inflater.inflate(R.layout.my_layout, container, false);
}
else if (this.myView.getParent() != null) {
FrameLayout parentView = (FrameLayout) this.myView.getParent();
parentView.removeView(this.myView);
}
return this.myView;
}
它对我来说效果很好,请告诉我它是否适合你;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)