0

アンドロイドプロジェクトで作業していて、カスタマイズされたオーバーレイクラスで問題が発生しました。前のクラスからこのクラスへのputextra値を取得できません。getIntent()メソッドでエラーが表示されます。このエラーを修正するのに役立つコードは次のとおりです。

import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.MotionEvent;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;

/**
 * Class used to place marker or any overlay items on Map
 * */
public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

       private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

       private Context context;
       String place_reference;

       public AddItemizedOverlay(Drawable defaultMarker) {
            super(boundCenterBottom(defaultMarker));
       }

       public AddItemizedOverlay(Drawable defaultMarker, Context context) {
            this(defaultMarker);
            this.context = context;
       }

       @Override
       public boolean onTouchEvent(MotionEvent event, MapView mapView)
       {   

           if (event.getAction() == 1) {
               GeoPoint geopoint = mapView.getProjection().fromPixels(
                   (int) event.getX(),
                   (int) event.getY());
               // latitude
               double lat = geopoint.getLatitudeE6() / 1E6;
               // longitude
               double lon = geopoint.getLongitudeE6() / 1E6;
               //Toast.makeText(context, "Lat: " + lat + ", Lon: "+lon, Toast.LENGTH_SHORT).show();
           }
           return false;
       } 

       @Override
       protected OverlayItem createItem(int i) {
          return mapOverlays.get(i);
       }

       @Override
       public int size() {
          return mapOverlays.size();
       }

       @Override
       protected boolean onTap(int index) {
         OverlayItem item = mapOverlays.get(index);
         AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
         dialog.setTitle(item.getTitle());
         dialog.setMessage(item.getSnippet());
         dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                Intent i = getIntent();
                i.getStringExtra(place_reference);

                Intent intent = new Intent(context, SinglePlaceActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent );
            }
         })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
//                  MainActivity.this.finish();
                }
            });
         dialog.show();
         return true;
       }

       public void addOverlay(OverlayItem overlay) {
          mapOverlays.add(overlay);
       }

       public void populateNow(){
           this.populate();
       }

    }

これは私のコードで見つけた私のエラーです

ここに画像の説明を入力してください

4

4 に答える 4

1

getIntent()のメソッドですActivity。あなたの場合、私は次のようなコンストラクターを作成します。

private Activity activity;

public AddItemizedOverlay(Drawable defaultMarker, Context context, Activity a) {
    this(defaultMarker);
    this.context = context;
    this.activity = a;
}

そして、activity.getIntent();

于 2012-10-18T10:11:01.493 に答える
0

place_referenceアクティビティ全体ではなく、コンストラクターに渡してインスタンス変数として保存する方がよいと思います。明らかに、これは、追加の文字列が1つだけ必要な場合、このクラスで1回だけ使用される場合にも適しています。あなたが試すことができます:

String place_reference;    

public AddItemizedOverlay(Drawable defaultMarker, String place_reference) {
this(defaultMarker);
this.place_reference = place_reference;
}
// and then use place_reference any where you need
于 2012-10-18T10:17:12.663 に答える
0

アクティビティをPASSWORDizedOverlayに渡す必要があります。その後、あなたは呼び出すことができます

activity.getIntent();
于 2012-10-18T10:13:34.720 に答える
0

のように書く Intent i= context.getIntent();

このインテントを保持しているクラスは内部クラスであるため。

于 2012-10-18T11:18:57.993 に答える