使用来自另一个类的Map Fragment

问题描述 投票:0回答:1

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

编辑:我试着更好地解释,这里的目标是使用从MapActivity类生成的Fragment来加载我的位置。但是,我使用我的主类已经有一个片段。所以我想我必须将我的主类上的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类的Google地图......因为你可以看到地图无法识别,而且函数OnMapReady没有被调用

enter image description here

android fragment
1个回答
1
投票

如果我找到了你,你想从MainActivity.java类访问你的GoogleMap对象。以下是如何使用Interface实现的:

首先,您可以在MainActivity.java中创建接口,就像这样,您可以添加此代码

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

然后,在MainActivity.java中声明myMapInterface,as

private MyMapInterface myMapInterface ;

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

myMapInterface.onMap(sydney);

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

MapActivity implements MyMapInterface

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

@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");
© www.soinside.com 2019 - 2024. All rights reserved.