Изменение getMap на GetMapAsync

Я пытаюсь создать интерактивное информационное окно на основе одного из ответов Stack Overflow. Однако я получаю сообщение об ошибке, когда в коде используется getMap(). Хотя я пробовал использовать getMapAsync(), я не могу решить проблему. Помогите, пожалуйста. Если для интерактивного информационного окна с кнопкой доступен какой-либо новый код, поделитесь им, пожалуйста.

public class MainActivity extends AppCompatActivity {

private ViewGroup infoWindow;
private TextView infoTitle;
private TextView infoSnippet;
private Button infoButton1, infoButton2;
private OnInfoWindowElemTouchListener infoButtonListener;

static final LatLng latlng1 = new LatLng(28.5355, 77.3910);
static final LatLng latlng2 = new LatLng(28.6208768, 77.3726377);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    final MapWrapperLayout mapWrapperLayout = (MapWrapperLayout)findViewById(R.id.map_relative_layout);
    final GoogleMap googleMap = mapFragment.getMap();

    // MapWrapperLayout initialization
    // 39 - default marker height
    // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge
    mapWrapperLayout.init(googleMap, getPixelsFromDp(this, 39 + 20));

    // We want to reuse the info window for all the markers,
    // so let's create only one class member instance
    this.infoWindow = (ViewGroup)getLayoutInflater().inflate(R.layout.custom_infowindow, null);

    this.infoTitle = (TextView)infoWindow.findViewById(R.id.nameTxt);
    this.infoSnippet = (TextView)infoWindow.findViewById(R.id.addressTxt);
    this.infoButton1 = (Button)infoWindow.findViewById(R.id.btnOne);
    this.infoButton2 = (Button)infoWindow.findViewById(R.id.btnTwo);

    // Setting custom OnTouchListener which deals with the pressed state
    // so it shows up
    this.infoButtonListener = new OnInfoWindowElemTouchListener(infoButton1, getResources().getDrawable(R.drawable.btn_bg), getResources().getDrawable(R.drawable.btn_bg)){
        @Override
        protected void onClickConfirmed(View v, Marker marker) {
            // Here we can perform some action triggered after clicking the button
            Toast.makeText(MainActivity.this, "click on button 1", Toast.LENGTH_SHORT).show();
        }
    };
    this.infoButton1.setOnTouchListener(infoButtonListener);

    infoButtonListener = new OnInfoWindowElemTouchListener(infoButton2, getResources().getDrawable(R.drawable.btn_bg),getResources().getDrawable(R.drawable.btn_bg)){
        @Override
        protected void onClickConfirmed(View v, Marker marker) {
            Toast.makeText(getApplicationContext(), "click on button 2", Toast.LENGTH_LONG).show();
        }
    };
    infoButton2.setOnTouchListener(infoButtonListener);

    /*infoWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "click on infowindow", Toast.LENGTH_LONG).show();
        }
    });*/

    googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
        @Override
        public View getInfoWindow(Marker marker) {
            return null;
        }

        @Override
        public View getInfoContents(Marker marker) {
            // Setting up the infoWindow with current's marker info
            infoSnippet.setText(marker.getTitle());
            infoTitle.setText(marker.getSnippet());
            infoButtonListener.setMarker(marker);

            // We must call this to set the current marker and infoWindow references
            // to the MapWrapperLayout
            mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow);
            return infoWindow;
        }
    });

    // Let's add a couple of markers
    googleMap.addMarker(new MarkerOptions()
            .position(latlng1)
            .title("Source")
            .snippet("Comapny Name")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

    googleMap.addMarker(new MarkerOptions()
            .position(latlng2)
            .title("Destination")
            .snippet("AmisunXXXXXX")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

    //googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15));
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng1, 10));

}

public static int getPixelsFromDp(Context context, float dp) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int)(dp * scale + 0.5f);
}

}

Ошибка возникает из-за того, что Google удалил getMap(), но я не знаю альтернативного решения для этого.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОБНОВИТЬ

Определите private GoogleMap gMap и внедрите OnMapReadyCallback в свое основное действие и реализуйте метод onMapReady.

в onMapReady вы должны написать эту строку gMap = googleMap, тогда вы можете делать все, что хотите в onMapReady

  • получение текущего местоположения
  • пользовательская настройка для вашей карты
  • а также ...

теперь пришло время использовать эти строки в вашем методе OnCreate

    SupportMapFragment supportMapFragment = (SupportMapFragment)
            getSupportFragmentManager().findFragmentById(R.id.map);
    supportMapFragment.getMapAsync(this);

это должно решить вашу проблему, надеюсь, это помогло вам

Я прошу меня внедрить onMapReady, не могли бы вы предоставить больше кода?

Stanislav Veverka 26.09.2018 11:17

Другие вопросы по теме