Использование фрагмента карты из другого класса - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу использовать фрагмент карты из другого класса, который называется MapsActivity.

РЕДАКТИРОВАТЬ: Я попытаюсь объяснить лучше, цель здесь состоит в том, чтобы использовать фрагмент, сгенерированный из класса MapActivity, чтобы загрузить мою позицию. Тем не менее, я использую свой основной класс, который уже имеет один фрагмент. Поэтому я думаю, что должен связать фрагмент в моем основном классе с фрагментом MapActivity. Если вы предлагаете использовать тот же класс для этого, это нормально для меня, я просто не знаю, как загрузить свою позицию на фрагменте карты с помощью моего пользовательского класса вместо этого класса MapActivity, который я получил здесь.

В моем основном классе я получил именно это, и это будет представление, которое я хочу:

private MapFragment mapFragment;

в моем основном классе .xml я получил это:

    <fragment
        android:id="@+id/mapCheckinFazerActivityMapView"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        tools:context=".MapsActivity"
        app:layout_constraintBottom_toBottomOf="@+id/imgCheckinFazerActivityBG"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtCheckinFazerActivityTitle"
        app:layout_constraintVertical_bias="0.0" />

Теперь у меня есть класс MapsActivity, который является основным после того, как я провел некоторые исследования ...

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.mapCheckinFazerActivityMapView);
        mapFragment.getMapAsync(this);
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        Log.d("MYTAG", "READY");
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }

    public void test(){
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

также у меня есть MapsActivity .xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewController.MapsActivity" />

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

EDIT:

Может быть, с этим изображением лучше объяснить. На моей MainActivity я получил эту карту, которая (по тому, что я мог сделать), я хочу быть картой Google класса MapActivity ... как вы можете видеть, карта не распознается, а функция OnMapReady не вызывается

enter image description here

1 Ответ

0 голосов
/ 04 сентября 2018

Если я правильно вас понял, вы хотите получить доступ к вашему GoogleMap объекту из класса MainActivity.java. Вот как это можно сделать, используя Интерфейс :

Прежде всего, вы можете создать интерфейс, вот так, вы можете добавить этот код в ваш MainActivity.java

public interface MyMapInterface {
    void onMap(LatLng ltlng);
}

Затем объявите myMapInterface в вашем MainActivity.java , как

private MyMapInterface myMapInterface ;

Еще одна вещь, которую нужно сделать в MainActivity.java , - это вызвать метод интерфейса, где бы вы ни хотели получить доступ к GoogleMap объекту:

myMapInterface.onMap(sydney);

Теперь, перейдите к вашему MapActivity.java классу и заставьте вашу Activity реализовать интерфейс, например:

MapActivity implements MyMapInterface

когда вы это сделаете, вы увидите красную линию под этой строкой, нажмите Alt + enter, и вам будет предложено добавить метод onMap (Latlng ltlng) , добавьте этот метод, нажав клавишу ввода , тогда вы можете получить доступ к вашей карте следующим образом:

@Override
    public void onMap(Latlng sydney) {
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in 
        Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }

Редактировать

Приносим извинения за доставленные неудобства, попробуйте следующее:

расширение интерфейса Сериализуемый класс

public interface MyMapInterface extends Serializable {
    void onMap(LatLng ltlng);
}

затем передайте объект интерфейса с намерением MapActivity.java , например:

intent.putExtra("MyMapInterface", this);
startActivity(intent);

затем в, MainActivity.java :

myMapInterface = getIntent().getSerializableExtra("MyMapInterface");
...