Android:设置谷歌地图类。需要一些建议

时间:2010-05-28 17:54:36

标签: android google-maps button onclick

好的,这就是我所拥有的。

Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
anandabutton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        startActivityForResult(myIntent,0);

    }

});

这个方法打开了我的MapClass类,目前我已经设置了显示一个地方的位置。

但是我有一大堆按钮,而不是为每个按钮制作很多不同的mapClass类,我想知道我可以只使用一个类,并根据按下'id'按钮,它会检查一个' if语句'然后将正确的坐标放入方法中以显示地图。这比编写20-30个课程要简洁得多。

我不确定我是否已经解释了这一点,如果不让我知道的话。

感谢您的帮助。

这是我的地图课......

public class MapClass extends MapActivity {

MapView mapView;
MapController mc;
GeoPoint p;

@Override
public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);

    int button = getIntent().getExtras().getInt("button", -1);
    switch(button){
    case DundrumSelector.BUTTON1:
        handleCoordinates("53.288719","-6.241179");
        break;
    case DundrumSelector.BUTTON2:
        handleCoordinates("53.288719","-6.241179");
        break;
    }
}




private void handleCoordinates(String l, String b){


    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
    View zoomView = mapView.getZoomControls();

    zoomLayout.addView(zoomView,
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);

    mc = mapView.getController();
    String coordinates[] = {l, b};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
            (int) (lat*1E6),
            (int) (lng*1E6));

    mc.animateTo(p);
    mc.setZoom(17);
    mapView.invalidate();


}

然后我的其他活动是

public static final int BUTTON1 = R.id.anandaAddressButton;

Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
anandabutton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        myIntent.putExtra("button", BUTTON1);
        startActivityForResult(myIntent,0);

    }

});

出于某种原因,当我尝试点击列表中除BUTTON1以外的任何其他项目时程序崩溃。我不得不拿出BUTTON2,BUTTON3等,因为如果我尝试进入他们的视野,它就会不断崩溃。但是当我注释掉这个onClick方法时,它们都可以正常工作吗?

你们中的任何一个人都有任何野心吗?你了解我的问题吗? 感谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要始终启动相同的Intent,但是在intent的接收器端,即启动的活动,你想根据按下的按钮使用不同的方法。 / p>

我建议to add a constant to the Intent取决于您按下的按钮,并在MapClass中检查它是哪个常数,然后根据这样做做出反应:

public void onClick(View view) {
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        myIntent.putExtra("button", BUTTON1);
        startActivityForResult(myIntent,0);
 }

BUTTON1和BUTTON2是常量int,您在Acitivty类中定义的对应于您要添加的按钮。

在onCreate()方法的MapClass中,执行以下操作:

int button = getIntent().getExtras().getIntExtra("button", -1);
switch(button) {
   case BUTTON1:
   //do something
   break;
   case BUTTON2:
   //do method for button 2
   break;
   default:
   //do another thing
   break;
}

还要涵盖您的修改:

如果只有坐标改变了,我会做点什么:

int button = getIntent().getExtras().getIntExtra("button", -1);
switch(button) {
   case BUTTON1:
   handleCoordinates("53.288719","-6.241179");
   break;
   case BUTTON2:
  handleCoordinates("23.288719","23.241179"
   break;
   default:
   //do another thing
   break;
}



private void handleCoordinates(String l, String b) {
mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
    View zoomView = mapView.getZoomControls();

    zoomLayout.addView(zoomView,
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);

    mc = mapView.getController();
    String coordinates[] = {l, b};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
            (int) (lat*1E6),
            (int) (lng*1E6));

    mc.animateTo(p);
    mc.setZoom(17);
    mapView.invalidate();
}

答案 1 :(得分:1)

为了补充Sebi的答案以及您在评论中提出的问题,您要做的是创建一个处理程序(可能在您的onCreate()方法中):

OnClickListener buttonListener = new OnClickListener(){
    public void onClick(View v) {
        if(!(v instanceof Button))
           //throw error, not supposed to happen
        Button b = (Button)v;
        int id = b.getId();
        int code; //used to know when your activity comes back (if you need to)
        int lat;
        int long;
        switch(id) {
           case button1.getId():
              //set code, lat and long for button1
           case button2.getId():
              //set code, lat and long for button2
        ...
        }
        Bundle bdl = new Bundle();
        bdl.putDouble("latitude", lat);
        bdl.putDouble("longitude", long);
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        myIntent.putExtras(bdl);
        startActivityForResult(myIntent,code);
}
button1.setOnClickListener(buttonListener);
button2.setOnClickListener(buttonListener);
...