Android: кто может помочь мне с настройкой этого класса карт Google, пожалуйста? - PullRequest
0 голосов
/ 30 мая 2010

Во-первых, это оказалось довольно длинным постом, поэтому, пожалуйста, потерпите меня, поскольку это не так уж сложно, но вам, возможно, придется кое-что уточнить со мной, если я не объяснил это правильно. Итак, с некоторой помощью на днях от ребят на этом форуме, мне удалось частично настроить мой класс 'mapClass', но у меня возникли проблемы с ним, и он работает неправильно, поэтому я хотел бы получить некоторую помощь, если это возможно. Я опубликую код ниже, чтобы вы могли видеть.

То, что я получил, это класс 'Dundrum', который устанавливает listView для массива элементов.

Затем я получил класс 'dundrumSelector', который я использую для установки методов setOnClickListener () в listItems и связывания их с их правильными представлениями.

Это мой класс селектора DUNDDRUM ....

    public static final int BUTTON1 = R.id.anandaAddressButton;
public static final int BUTTON2 = R.id.bramblesCafeAddressButton;
public static final int BUTTON3 = R.id.brannigansAddressButton;

public void onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState);

    int position = getIntent().getExtras().getInt("position");

    if(position == 0){
        setContentView(R.layout.ananda);
    };
    if(position == 1){
        setContentView(R.layout.bramblescafe);
    };
    if(position == 2){
        setContentView(R.layout.brannigans);
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);

    }

});

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {

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

});

и т. Д. И т. Д. *

Тогда я установил статические целые для представления кнопок, которые вы видите в верхней части этого класса, причина этого в том, что в моей деятельности mapClass я просто хочу иметь один метод, потому что единственное, что меняется координаты каждого места. то есть. я не хочу, чтобы более 100 классов карт делали в методе одно и то же, кроме разных координат.

Итак, мой класс карты выглядит следующим образом ...

case DundrumSelector.BUTTON1:
        handleCoordinates("53.288719","-6.241179");
        break;
    case DundrumSelector.BUTTON2:
        handleCoordinates("53.288719","-6.241179");
        break;
    case DundrumSelector.BUTTON3:
        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();


}

Теперь вот где моя проблема. События onClick () даже не работают из listView, чтобы получить правильные представления. Мне нужно закомментировать методы в «DundrumSelector», прежде чем я смогу узнать их мнение.

И это то, что я не понимаю, во-первых, почему не работают события onClick (), потому что это даже не при следующем просмотре, где находится карта.

Я знаю, что это очень длинный пост, и он может быть довольно запутанным, поэтому дайте мне знать, если вам нужны какие-либо разъяснения ..

Просто напомню, что я пытаюсь сделать, это просто иметь один класс, который устанавливает координаты карты, как то, что я пытаюсь сделать в моем 'mapClass'.

Пожалуйста, кто-нибудь может помочь или предложить другой способ сделать это! Большое спасибо всем за чтение.

1 Ответ

0 голосов
/ 31 мая 2010

Проблема заключается в следующем:

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {

Здесь вы пытаетесь установить для onClickListener кнопку, которая доступна только в том случае, если вы находитесь в положении 2 и вызвали правильный метод setContentView (). Если у вас есть другой Просмотр как контент (который не содержит вашей кнопки), тогда

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);

вернет ноль, а в следующей строке будет исключение NullPointerException. Поэтому вы должны добавить этот onClickListener, только если вы также используете соответствующий макет.

И да, это работает, если вы закомментируете это, потому что тогда вы не пытаетесь вызвать метод с нулевым значением. Но, с другой стороны, если вы закомментируете это, то оно не будет регистрировать ваши клики и, следовательно, не будет продолжено.

Чтобы было еще яснее:

когда вы проходите позицию 0, тогда вы устанавливаете этот ContentView:

if(position == 0){
        setContentView(R.layout.ananda);
    };

Поэтому я предполагаю, что другие две кнопки не будут присутствовать в этом макете, и поэтому назначение им ClickListener вызовет исключение NullPointerException.

Чтобы решить эту проблему, и если вам действительно нужны эти 3 разных макета, я бы сделал это следующим образом (пример для первой кнопки):

if(position == 0){
        setContentView(R.layout.ananda);
        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);
            }
        });
}
...