Как прочитать GeoPoint один раз, а затем вернуться к обычному виду? - PullRequest
0 голосов
/ 06 июня 2018

Я совершенно новичок в разработке Android, я использовал osmdroid при создании приложения для Android, я хочу получить точку, нажав на карту, и я нашел это решение:

MapEventsReceiver mReceive = new MapEventsReceiver()
{
    @Override
    public boolean singleTapConfirmedHelper(GeoPoint p) {
        Toast.makeText(getBaseContext(),p.getLatitude() + " - "+p.getLongitude(),Toast.LENGTH_LONG).show();
        GeoPoint point = new GeoPoint(p.getLatitude(),p.getLongitude());
        // This is the line i will explain in problem #2
        Global_point = point;
        return true;
    }

    @Override
    public boolean longPressHelper(GeoPoint p) {
        return false;
    }
};
MapEventsOverlay OverlayEvents = new MapEventsOverlay(mReceive);
mapView.getOverlays().add(OverlayEvents);

этой страницей , и я поместил ее в Onclick функцию кнопки.

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

1- Это (получение точки)Не остановится и будет работать вечно. Как я могу остановить его, когда GeoPoint получен?

2- MapEventsReceiver - это интерфейс, который должен реализовывать, как он определен, поэтому функция singleTapConfirmedHelper должна возвращать логическое значение. Как я могу вернуть полученную GeoPoint, нажав?Я знаю, что могу определить глобальную переменную и заполнить ее в функции singleTapConfirmedHelper, но я спрашиваю, возможно ли изменить возвращаемое значение функции интерфейса.

Ps : я знаю, что могу удалить наложение карты с помощью индексации:

mapView.getOverlays().add(0,OverlayEvents);
mapView.getOverlays().remove(0);

, но я не знаю, где его разместить.

1 Ответ

0 голосов
/ 06 июня 2018

Вы должны вызвать некоторый метод из singleTapConfirmedHelper.Это анонимный класс, поэтому он может вызывать методы класса, в котором он создан.

MapEventsReceiver mReceive = new MapEventsReceiver() {
    @Override
    public boolean singleTapConfirmedHelper(GeoPoint p) {
        Toast.makeText(getBaseContext(),p.getLatitude() + " - "+p.getLongitude(),Toast.LENGTH_LONG).show();
        onPointSelected(point);
        return true;
    }
//...
}

И позже, где-нибудь в вашей деятельности или фрагменте:

private void onPointSelected(GeoPoint p) {
    //do whatever you want with the point. For example: store it in a field
    this.selectedPoint = p;
    //finish interaction => somehow remove or turn of particular overlay
    mapView.getOverlays().remove(0);
}
...