0

MapActivity を拡張する次のクラスを作成します。エラーはこのクラスの行にあります

View view = 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>

そして、これがアダプターです

public class ShowCarExpandListAdapter extends 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

マップビューをアダプタ内に配置することはできません(少なくとも別のクラスには配置できません)。Mapviewはビューではありません。mapviewは、結合されて分割できない一種のアクティビティ/ビューです。あなたが何を達成しようとしているのかはわかりませんが、説明していただければ、別のアプローチを提案できるかもしれません。

于 2012-10-24T12:54:13.833 に答える
0

公式の Java ドキュメントによると、マップ MapActivity ごとに使用できるマップ ビューは 1 つだけです。次のリンクでも同じ問題について説明しています。

1 つのアクティビティで 2 つの MapView を作成するには?

したがって、問題を解決するために考えられる解決策の 1 つは、Google 静的マップ 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 に答える