0

我创建了以下扩展 MapActivity 的类。错误在这个类中

查看视图 = infalInflater.inflate(R.layout.car_map_view, null);

public class ShowCarMapChild extends MapActivity {
private MapView mapView;
private Car car;
private String tag;



@Override
protected void onCreate(Bundle icicle) {
    // TODO Auto-generated method stub
    super.onCreate(icicle);
    setContentView(R.layout.car_map_view);
}

public void setCar(Car car){
    this.car = car;
}

public void setTag (String tag){
    this.tag = tag;
}

public String getTag (){
    return tag;
}

public View getMapView(Context context){
    LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View view = infalInflater.inflate(R.layout.car_map_view, null);
    setMap(view,context);
    return view;
}

public void setMap(View view, Context context){
    mapView = (MapView) view.findViewById(R.id.mapShowCarLocation);
    MapController mc = mapView.getController();
    mc.animateTo(car.getLocation());
    mc.setZoom(15);
    PinpointItem point = new PinpointItem(car.getLocation(), car, context);
    Drawable d = getResources().getDrawable(R.drawable.pinpoint);
    CustomPinpointOverlay overlay = new CustomPinpointOverlay(d);
    overlay.insertPinpoint(point);
    mapView.getOverlays().add(overlay);
}
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

}

这是xml文件:

 <?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="150dip"
android:orientation="vertical" >

    <com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapShowCarLocation"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:apiKey="0UFOPeLgKxoW8VGjdzV5QN6N53N7733i1kTFI3g"
        android:enabled="true" />
</LinearLayout>

这是适配器

公共类 ShowCarExpandListAdapter 扩展 BaseExpandableListAdapter {

private Context context;
private ArrayList<ShowCarExpandGroup> groups;
private Car car;


public ShowCarExpandListAdapter (Context context, ArrayList<ShowCarExpandGroup> groups, Car car){
    this.context = context;
    this.groups = groups;
    this.car = car;
}


public void addItem(ShowCarExpandChild item, ShowCarExpandGroup group){
    if (!groups.contains(group)){
        groups.add(group);
    }
    int index = groups.indexOf(group);
    ArrayList<ShowCarExpandChild> ch = groups.get(index).getItems();
    ch.add(item);
    groups.get(index).setItems(ch);
}

public void addItem(ShowCarMapChild item, ShowCarExpandGroup group){
    if (!groups.contains(group)){
        groups.add(group);
    }
    int index = groups.indexOf(group);
    ArrayList<ShowCarMapChild> ch = groups.get(index).getMapItems();
    ch.add(item);
    groups.get(index).setMapItems(ch);
}

public Object getChild(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    if (groupPosition == 0){
        ArrayList<ShowCarMapChild> chList = groups.get(groupPosition).getMapItems();
        return chList.get(childPosition);
    }else{
        ArrayList<ShowCarExpandChild> chList = groups.get(groupPosition).getItems();
        return chList.get(childPosition);
    }
}

public long getChildId(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return childPosition;
}


public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view,
        ViewGroup parent) {
    // TODO Auto-generated method stub

    if (view == null){
        if (groupPosition == 0){
            ShowCarMapChild mapChild = (ShowCarMapChild) getChild(groupPosition, childPosition);
            view = mapChild.getMapView(context);
            //LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            //ShowCarMapChild mapChild = (ShowCarMapChild) getChild(groupPosition, childPosition);
            //view = infalInflater.inflate(R.layout.car_map_view, null);
            //MapView mv = mapChild.getMap(view, context);
            //mv.setTag(mapChild.getTag());

        }else{
            LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            ShowCarExpandChild child = (ShowCarExpandChild) getChild(groupPosition, childPosition);
            view = infalInflater.inflate(R.layout.car_child, null);
            TextView tv = (TextView) view.findViewById(R.id.tvChild);
            tv.setText(child.getName());
            tv.setTag(child.getTag());
        }           
    }
    return view;
}

public int getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    if (groupPosition == 0){
        ArrayList<ShowCarMapChild> chList = groups.get(groupPosition).getMapItems();
        return chList.size();
    }else{
        ArrayList<ShowCarExpandChild> chList = groups.get(groupPosition).getItems();
        return chList.size();
    }
}

public Object getGroup(int groupPosition) {
    // TODO Auto-generated method stub
    return groups.get(groupPosition);
}

public int getGroupCount() {
    // TODO Auto-generated method stub
    return groups.size();
}

public long getGroupId(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
}

public View getGroupView(int groupPosition, boolean isLastChild, View view, ViewGroup parent) {
    // TODO Auto-generated method stub
    ShowCarExpandGroup group = (ShowCarExpandGroup) getGroup(groupPosition);
    if(view == null){
        LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        view = inf.inflate(R.layout.car_group, null);
    }
    TextView tv = (TextView) view.findViewById(R.id.tvGroup);
    tv.setText(group.getName());
    return view;
}

public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return true;
}

public boolean isChildSelectable(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return true;
}

}

下面是主要活动:

 public class ShowCarExpList extends Activity {
private static final int CODE_CHANGE_DETAILS = 1;
private ShowCarExpandListAdapter expAdapter;
private ArrayList<ShowCarExpandGroup> expListItems;
private ExpandableListView expandList;
private Button back;
private Button edit;
private Button book;
private TextView brand;
private ImageView image; 
private Car car;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("hemendik pasetan da", "egixe da?");
    setContentView(R.layout.car);
    setUpViews();
    expandList = (ExpandableListView) findViewById (R.id.expCarList);
    expListItems = setStandardGroups();
    expAdapter = new ShowCarExpandListAdapter (ShowCarExpList.this, expListItems, car);
    expandList.setAdapter(expAdapter);
    // Set up our adapter

}

private void setUpViews() {
    // TODO Auto-generated method stub
    back = (Button)findViewById (R.id.btnBackCarView);
    edit = (Button)findViewById (R.id.btnEditCarView);
    book = (Button)findViewById (R.id.btnBookCarCarView);
    Intent i = getIntent();
    car = (Car) i.getParcelableExtra("car");
    brand = (TextView)findViewById (R.id.txtCarViewBrand);
    image = (ImageView)findViewById (R.id.ivCarMainPhoto);
    String urlString = "http://tapazz.com/autopia/upload/cars/"+car.getPhotoUrl();
    DrawableManager.fetchDrawableOnThread(urlString, image, null);
    brand.setText(car.getBrand()+" "+car.getModel());
    back.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent in = new Intent(ShowCarExpList.this, MyCarsFragment.class);
            ShowCarExpList.this.startActivity(in);
        }
    });
    edit.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(ShowCarExpList.this, AddCarActivity.class);
            intent.putExtra("car", car);
            startActivityForResult(intent, CODE_CHANGE_DETAILS); 
        } 
    });
}

public ArrayList<ShowCarExpandGroup> setStandardGroups(){
    ArrayList<ShowCarExpandGroup> list = new ArrayList<ShowCarExpandGroup>();
    ArrayList<ShowCarExpandChild> list2;
    ArrayList<ShowCarMapChild> listMap = new ArrayList<ShowCarMapChild>();
    ShowCarExpandGroup gru1 = new ShowCarExpandGroup();
    gru1.setName("        Location");
    ShowCarMapChild ch1_1 = new ShowCarMapChild();
    ch1_1.setCar(car);
    ch1_1.setTag(null);
    listMap.add(ch1_1);
    gru1.setMapItems(listMap);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru2 = new ShowCarExpandGroup();
    gru2.setName("        License Plate");
    ShowCarExpandChild ch2_1 = new ShowCarExpandChild();
    ch2_1.setName(car.getLicensePlate());
    ch2_1.setTag(null);
    list2.add(ch2_1);
    gru2.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru3 = new ShowCarExpandGroup();
    gru3.setName("        Description");
    ShowCarExpandChild ch3_1 = new ShowCarExpandChild();
    if (car.getDescription()==null){
        ch3_1.setName("Sorry no description available");
    }else{
        ch3_1.setName(car.getDescription());
    }
    ch3_1.setTag(null);
    list2.add(ch3_1);
    gru3.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru4 = new ShowCarExpandGroup();
    gru4.setName("        Pricing");
    ShowCarExpandChild ch4_1 = new ShowCarExpandChild();
    ch4_1.setName("Price per hour: "+((Double)car.getPricePerHour()).toString());
    ch4_1.setTag(null);
    list2.add(ch4_1);
    ShowCarExpandChild ch4_2 = new ShowCarExpandChild();
    ch4_2.setName("Price per km: "+((Double)car.getPricePerKm()).toString());
    ch4_2.setTag(null);
    list2.add(ch4_2);
    gru4.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru5 = new ShowCarExpandGroup();
    gru5.setName("        Host/Owner");
    ShowCarExpandChild ch5_1 = new ShowCarExpandChild();
    ch5_1.setName("Maarten");
    ch5_1.setTag(null);
    list2.add(ch5_1);
    gru5.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru6 = new ShowCarExpandGroup();
    gru6.setName("        Reviews");
    setReviews();
    ShowCarExpandChild ch6_1 = new ShowCarExpandChild();
    ch6_1.setName("no reviews");
    ch6_1.setTag(null);
    list2.add(ch6_1);
    gru6.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru7 = new ShowCarExpandGroup();
    gru7.setName("        Insurance");
    ShowCarExpandChild ch7_1 = new ShowCarExpandChild();
    ch7_1.setName(car.getInsuranceCompany());
    ch7_1.setTag(null);
    list2.add(ch7_1);
    gru7.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru8 = new ShowCarExpandGroup();
    gru8.setName("        More Pictures");
    ShowCarExpandChild ch8_1 = new ShowCarExpandChild();
    ch8_1.setName("no pictures");
    ch8_1.setTag(null);
    list2.add(ch8_1);
    gru8.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru9 = new ShowCarExpandGroup();
    gru9.setName("        Availability");
    ShowCarExpandChild ch9_1 = new ShowCarExpandChild();
    ch9_1.setName("now available");
    ch9_1.setTag(null);
    list2.add(ch9_1);
    gru9.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru10 = new ShowCarExpandGroup();
    gru10.setName("        Sharing settings");
    ShowCarExpandChild ch10_1 = new ShowCarExpandChild();
    ch10_1.setName("private");
    ch10_1.setTag(null);
    list2.add(ch10_1);
    gru10.setItems(list2);
    list2 = new ArrayList<ShowCarExpandChild>();

    ShowCarExpandGroup gru11 = new ShowCarExpandGroup();
    gru11.setName("        Keyless lock");
    ShowCarExpandChild ch11_1 = new ShowCarExpandChild();
    ch11_1.setName("Keylock installed! :)");
    ch11_1.setTag(null);
    list2.add(ch11_1);
    gru11.setItems(list2);

    list.add(gru1);
    list.add(gru2);
    list.add(gru3);
    list.add(gru4);
    list.add(gru5);
    list.add(gru6);
    list.add(gru7);
    list.add(gru8);
    list.add(gru9);
    list.add(gru10);
    list.add(gru11);
    return list;
}

private void setReviews() {
    // TODO Auto-generated method stub

}

}

以及它给出的错误:

       10-24 16:09:48.218: E/AndroidRuntime(353): FATAL EXCEPTION: main
    10-24 16:09:48.218: E/AndroidRuntime(353): android.view.InflateException: Binary XML file line #7: Error inflating class com.google.android.maps.MapView
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.createView(LayoutInflater.java:513)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.tapazz.car.ShowCarMapChild.getMapView(ShowCarMapChild.java:44)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.tapazz.car.ShowCarExpandListAdapter.getChildView(ShowCarExpandListAdapter.java:80)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:450)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.AbsListView.obtainView(AbsListView.java:1315)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ListView.makeAndAddView(ListView.java:1727)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ListView.fillDown(ListView.java:652)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ListView.fillSpecific(ListView.java:1284)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ListView.layoutChildren(ListView.java:1558)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.AbsListView.onLayout(AbsListView.java:1147)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.ScrollView.onLayout(ScrollView.java:1205)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.View.layout(View.java:7035)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.os.Handler.dispatchMessage(Handler.java:99)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.os.Looper.loop(Looper.java:123)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at java.lang.reflect.Method.invoke(Method.java:521)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at dalvik.system.NativeStart.main(Native Method)
    10-24 16:09:48.218: E/AndroidRuntime(353): Caused by: java.lang.reflect.InvocationTargetException
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.google.android.maps.MapView.<init>(MapView.java:238)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at java.lang.reflect.Constructor.constructNative(Native Method)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at android.view.LayoutInflater.createView(LayoutInflater.java:500)
    10-24 16:09:48.218: E/AndroidRuntime(353):  ... 38 more
    10-24 16:09:48.218: E/AndroidRuntime(353): Caused by: java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.google.android.maps.MapView.<init>(MapView.java:282)
    10-24 16:09:48.218: E/AndroidRuntime(353):  at com.google.android.maps.MapView.<init>(MapView.java:255)
    10-24 16:09:48.218: E/AndroidRuntime(353):  ... 42 more

希望它会有所帮助

4

2 回答 2

0

根据官方 java 文档,每个地图 MapActivity 只能使用一个地图视图。以下链接也讨论了相同的问题:

如何在一个 Activity 上制作 2 个 MapView?

因此,要解决您的问题,一种可能的解决方案是使用谷歌静态地图 API 并在用户单击静态地图视图时打开完整的 mapView。在以下问题中查看@Siddharth Lele 的答案,以获取有关如何添加静态地图的帮助...

Android - Listview 中包含的 MapView

您可以使用智能图像视图之类的东西,它允许将 http URI 设置为图像 URI。您可以将静态地图 URI 设置为图像 URI,以在 ImageVIew 中显示地图。智能图像视图的源代码也可以在以下位置获得:

https://github.com/loopj/android-smart-image-view

或者您可以重新设计您的应用程序并创建一个单独的地图视图并创建多个叠加层来显示您的数据。

于 2012-10-24T14:51:29.420 回答
0

您根本不能将地图视图放在适配器中(至少不能放在单独的类中)。Mapview 不是视图,mapview 是一种组合在一起且不能拆分的活动/视图。我不确定您要达到的目标,但如果您能解释一下,我可能会提出另一种方法。

于 2012-10-24T12:54:13.833 回答