在android中使UI内容无效

在android中使UI内容无效,android,invalidation,mapactivity,Android,Invalidation,Mapactivity,我有一个MapActivity和一个微调器。在微调器上有一个MSelected事件,它会更改视图的内容。 因此,我在spinner onItemSelected事件上再次应用了setContentView,因为我更改了实际包含数据的var内容。但在这里,它导致了崩溃,原因是:java.lang.IllegalStateException:在MapActivity中只允许有一个MapView 所以我这样做了 startActivity(new Intent(MapMultipleUsersActi

我有一个MapActivity和一个微调器。在微调器上有一个MSelected事件,它会更改视图的内容。 因此,我在spinner onItemSelected事件上再次应用了setContentView,因为我更改了实际包含数据的var内容。但在这里,它导致了崩溃,原因是:java.lang.IllegalStateException:在MapActivity中只允许有一个MapView

所以我这样做了

startActivity(new Intent(MapMultipleUsersActivity.this,MapMultipleUsersActivity.class));
finish();
我尝试在mapview对象上使其无效,但它的任务失败。那么我需要做什么来代替它呢

我的完整堆栈跟踪如下

 FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #6: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:513)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
at android.app.Activity.setContentView(Activity.java:1647)
at com.app.milesoft.phonecash.MapMultipleUsersActivity$2.onItemSelected(MapMultipleUsersActivity.java:93)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
at android.widget.AdapterView.access$200(AdapterView.java:42)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at com.app.milesoft.map.multipleusers.MapLocationViewer.<init>(MapLocationViewer.java:28)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:500)
... 20 more
Caused by: java.lang.IllegalStateException: You are only allowed to have a single MapView in a  
    MapActivity
at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:379)
at com.google.android.maps.MapView.<init>(MapView.java:280)
at com.google.android.maps.MapView.<init>(MapView.java:226)
at com.app.milesoft.map.multipleusers.MapLocationViewer.init(MapLocationViewer.java:45)
... 24 more
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/home_container"
  android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <com.app.milesoft.map.multipleusers.MapLocationViewer
 android:id="@+id/map_location_viewer"
 android:layout_width="fill_parent"
android:layout_height="fill_parent" >
public class MapLocationViewer extends LinearLayout {

private MapLocationOverlay overlay;

//  Known latitude/longitude coordinates that we'll be using.
private List<MapLocation> mapLocations;

private MapView mapView;
Context mcontext;

public MapLocationViewer(Context context, AttributeSet attrs) {
    super(context, attrs);
    mcontext=context;
    init();
}

public MapLocationViewer(Context context) {
    super(context);
    init();
}

public void init() {        

    setOrientation(VERTICAL);
    setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT));
           //this upper row xml is containing the Spinner View
    View v=View.inflate(getContext(), R.layout.map_upper_row, null);

    //mapView = new MapView(getContext(),"0DUEIIn35xtmfWC2DXprK5kqNF-aEaNgRJ4ONxw");

    //Change Your Map Key Here.....
    mapView = new MapView(getContext(),"0YOGrMpIJgaO92C0lXFtI6qF5YRl2Oe5h9UVoiQ");
    mapView.setEnabled(true);
    mapView.setClickable(true);
    addView(v);

    addView(mapView);

    overlay = new MapLocationOverlay(this);
    mapView.getOverlays().add(overlay);

    mapView.getController().setZoom(14);
    //mapView.setSatellite(true);
    mapView.getController().setCenter(getMapLocations().get(0).getPoint());
}
 }
致命异常:main
android.view.InflateException:二进制XML文件行#6:膨胀类时出错
在android.view.LayoutInflater.createView中(LayoutInflater.java:513)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
在android.view.LayoutInflater.inflate(LayoutInflater.java:407)
在android.view.LayoutInflater.充气(LayoutInflater.java:320)
在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
位于android.app.Activity.setContentView(Activity.java:1647)
在com.app.milesoft.phonecash.MapMultipleUsersActivity$2.onItemSelected上(MapMultipleUsersActivity.java:93)
在android.widget.AdapterView.fireOnSelected上(AdapterView.java:864)
在android.widget.AdapterView.access$200(AdapterView.java:42)
在android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)上
位于android.os.Handler.handleCallback(Handler.java:587)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:4627)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.reflect.InvocationTargetException
位于com.app.milesoft.map.multipleusers.MapLocationViewer。(MapLocationViewer.java:28)
位于java.lang.reflect.Constructor.constructNative(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:446)
在android.view.LayoutInflater.createView中(LayoutInflater.java:500)
... 20多
原因:java.lang.IllegalStateException:在一个视图中只允许有一个MapView
地图活动
在com.google.android.maps.MapActivity.setupMapView上(MapActivity.java:379)
位于com.google.android.maps.MapView(MapView.java:280)
位于com.google.android.maps.MapView(MapView.java:226)
位于com.app.milesoft.map.multipleusers.MapLocationViewer.init(MapLocationViewer.java:45)
... 还有24个
我的MapActivity xml如下所示

 FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #6: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:513)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
at android.app.Activity.setContentView(Activity.java:1647)
at com.app.milesoft.phonecash.MapMultipleUsersActivity$2.onItemSelected(MapMultipleUsersActivity.java:93)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
at android.widget.AdapterView.access$200(AdapterView.java:42)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at com.app.milesoft.map.multipleusers.MapLocationViewer.<init>(MapLocationViewer.java:28)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:500)
... 20 more
Caused by: java.lang.IllegalStateException: You are only allowed to have a single MapView in a  
    MapActivity
at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:379)
at com.google.android.maps.MapView.<init>(MapView.java:280)
at com.google.android.maps.MapView.<init>(MapView.java:226)
at com.app.milesoft.map.multipleusers.MapLocationViewer.init(MapLocationViewer.java:45)
... 24 more
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/home_container"
  android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <com.app.milesoft.map.multipleusers.MapLocationViewer
 android:id="@+id/map_location_viewer"
 android:layout_width="fill_parent"
android:layout_height="fill_parent" >
public class MapLocationViewer extends LinearLayout {

private MapLocationOverlay overlay;

//  Known latitude/longitude coordinates that we'll be using.
private List<MapLocation> mapLocations;

private MapView mapView;
Context mcontext;

public MapLocationViewer(Context context, AttributeSet attrs) {
    super(context, attrs);
    mcontext=context;
    init();
}

public MapLocationViewer(Context context) {
    super(context);
    init();
}

public void init() {        

    setOrientation(VERTICAL);
    setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT));
           //this upper row xml is containing the Spinner View
    View v=View.inflate(getContext(), R.layout.map_upper_row, null);

    //mapView = new MapView(getContext(),"0DUEIIn35xtmfWC2DXprK5kqNF-aEaNgRJ4ONxw");

    //Change Your Map Key Here.....
    mapView = new MapView(getContext(),"0YOGrMpIJgaO92C0lXFtI6qF5YRl2Oe5h9UVoiQ");
    mapView.setEnabled(true);
    mapView.setClickable(true);
    addView(v);

    addView(mapView);

    overlay = new MapLocationOverlay(this);
    mapView.getOverlays().add(overlay);

    mapView.getController().setZoom(14);
    //mapView.setSatellite(true);
    mapView.getController().setCenter(getMapLocations().get(0).getPoint());
}
 }

我的MapLOcation类如下所示

 FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #6: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:513)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
at android.app.Activity.setContentView(Activity.java:1647)
at com.app.milesoft.phonecash.MapMultipleUsersActivity$2.onItemSelected(MapMultipleUsersActivity.java:93)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
at android.widget.AdapterView.access$200(AdapterView.java:42)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at com.app.milesoft.map.multipleusers.MapLocationViewer.<init>(MapLocationViewer.java:28)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:500)
... 20 more
Caused by: java.lang.IllegalStateException: You are only allowed to have a single MapView in a  
    MapActivity
at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:379)
at com.google.android.maps.MapView.<init>(MapView.java:280)
at com.google.android.maps.MapView.<init>(MapView.java:226)
at com.app.milesoft.map.multipleusers.MapLocationViewer.init(MapLocationViewer.java:45)
... 24 more
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/home_container"
  android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <com.app.milesoft.map.multipleusers.MapLocationViewer
 android:id="@+id/map_location_viewer"
 android:layout_width="fill_parent"
android:layout_height="fill_parent" >
public class MapLocationViewer extends LinearLayout {

private MapLocationOverlay overlay;

//  Known latitude/longitude coordinates that we'll be using.
private List<MapLocation> mapLocations;

private MapView mapView;
Context mcontext;

public MapLocationViewer(Context context, AttributeSet attrs) {
    super(context, attrs);
    mcontext=context;
    init();
}

public MapLocationViewer(Context context) {
    super(context);
    init();
}

public void init() {        

    setOrientation(VERTICAL);
    setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT));
           //this upper row xml is containing the Spinner View
    View v=View.inflate(getContext(), R.layout.map_upper_row, null);

    //mapView = new MapView(getContext(),"0DUEIIn35xtmfWC2DXprK5kqNF-aEaNgRJ4ONxw");

    //Change Your Map Key Here.....
    mapView = new MapView(getContext(),"0YOGrMpIJgaO92C0lXFtI6qF5YRl2Oe5h9UVoiQ");
    mapView.setEnabled(true);
    mapView.setClickable(true);
    addView(v);

    addView(mapView);

    overlay = new MapLocationOverlay(this);
    mapView.getOverlays().add(overlay);

    mapView.getController().setZoom(14);
    //mapView.setSatellite(true);
    mapView.getController().setCenter(getMapLocations().get(0).getPoint());
}
 }
公共类MapLocationViewer扩展了LinearLayout{
私有MapLocationOverlay;
//我们将使用的已知纬度/经度坐标。
私人地图位置列表;
私有地图视图;
语境;
公共MapLocationViewer(上下文、属性集属性){
超级(上下文,attrs);
mcontext=上下文;
init();
}
公共MapLocationViewer(上下文){
超级(上下文);
init();
}
public void init(){
设置方向(垂直);
setLayoutParams(新的LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL\u父级,android.view.ViewGroup.LayoutParams.FILL\u父级));
//上面这一行xml包含微调器视图
视图v=视图.充气(getContext(),R.layout.map\u上一行,null);
//mapView=新的mapView(getContext(),“0DUEIIn35xtmfWC2DXprK5kqNF-aEaNgRJ4ONxw”);
//在此处更改地图密钥。。。。。
mapView=新的mapView(getContext(),“0YOGrMpIJgaO92C0lXFtI6qF5YRl2Oe5h9UVoiQ”);
mapView.setEnabled(true);
mapView.setClickable(真);
addView(v);
addView(地图视图);
覆盖=新的MapLocationOverlay(此);
mapView.getOverlays().add(覆盖);
mapView.getController().setZoom(14);
//mapView.setSatellite(真);
mapView.getController().setCenter(getMapLocations().get(0.getPoint());
}
}
使用


这最终将导致重新绘制。

您在扩展xml布局时遇到问题,请尝试查看
二进制xml文件行#6:Error inflating class
活动似乎找不到您的自定义视图,即您的MapLocationViewer

尝试正确关闭标签

<com.app.milesoft.map.multipleusers.MapLocationViewer
     android:id="@+id/map_location_viewer"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />


还要检查您的MapLocationViewer是否在xml标记中提供的正确包中,该标记为
com.app.milesoft.map.multipleusers

发布其他代码和完整的堆栈跟踪。我已更新了帖子中的所有部分代码。告诉我是否有什么地方我错了,当我第一次这样做两次时,我遇到了麻烦在发布代码的过程中,我错过了xml中节点的closind部分。正如我在帖子中告诉你的那样,我关闭了节点,然后又重新启动了。你说的问题是,如果他们的问题不是一次性的,那么它一定在工作,并且MapLocationViewer以xml表示。