首页 > 解决方案 > 使用另一个类的地图片段

问题描述

我想使用另一个类的地图片段,称为 MapsActivity。

编辑:我会尝试更好地解释,这里的目标是使用从类 MapActivity 生成的片段来加载我的位置。但是,我正在使用我的主类,它已经有一个片段。所以我想我必须将我的主类上的 Fragment 与 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 它确实有效,但我只想将它用作我的主要活动的对象。你能给我一些帮助吗?提前致谢...

编辑:

也许有了这张图片,它可能会更好地解释。在我的 MainActivity 上,我得到了这张地图(通过我能做的)我想成为 MapActivity 类的谷歌地图......因为你可以看到地图未被识别并且函数 OnMapReady 未被调用

在此处输入图像描述

标签: androidfragment

解决方案


如果我理解正确,您想从 MainActivity.java 类访问您的GoogleMap对象。以下是如何使用Interface做到这一点:

首先,你可以创建界面,像这样,你可以添加这段代码,在你的MainActivity.java

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

然后,在MainActivity.java中声明myMapInterface

private MyMapInterface myMapInterface ;

在MainActivity.java中要做的另一件事是使用调用接口的方法,无论您想访问GoogleMap对象:

myMapInterface.onMap(sydney);

现在,来到您的MapActivity.java类,并让您的 Activity 实现接口,如下所示:

MapActivity implements MyMapInterface

当你这样做时,你会在该行下方看到红线,点击Alt+enter,它会提示你添加方法onMap(Latlng ltlng),点击enter键添加该方法,然后你可以像这样访问你的地图:

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

编辑

给您带来的不便敬请见谅,请尝试以下方法:

使您的界面扩展Serializable

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

然后,像这样在 Intent MapActivity.java中传递你的接口对象:

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

然后在MainActivity.java

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

推荐阅读