Android: настройка класса карты Google. Требуется немного советов - PullRequest
0 голосов
/ 28 мая 2010

Хорошо, вот что у меня есть.

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 Statement ', а затем вставьте правильные координаты в метод для отображения карты. Это было бы намного аккуратнее, чем 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 ]

1 голос
/ 28 мая 2010

Чтобы дополнить ответ Себи и вопрос, который вы задали в комментариях, вам нужно создать один обработчик (может быть в вашем методе 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);
...
1 голос
/ 28 мая 2010

Если я вас правильно понимаю, вы хотите всегда запускать одно и то же намерение, но на стороне получателя в намерении, то есть в действии, которое вы запускаете, вы хотите использовать разные методы в зависимости от того, какая кнопка была нажата.

Я бы предложил добавить константу к намерению в зависимости от нажатой кнопки, и в 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 в соответствии с кнопками, которые вы хотите добавить.

В MapClass в методе onCreate () вы делаете следующее:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...