我想使用另一个类MapsActivity的地图片段。
编辑:我会尽力解释得更好,这里的目标是使用从MapActivity类生成的Fragment加载我的位置。但是,我正在使用我的已经有一个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没有被调用
答案 0 :(得分:1)
如果我正确理解了您的意思,您想从MainActivity.java类访问您的 GoogleMap 对象。使用接口:
的方法如下:首先,您可以在 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));
}
修改
对于给您带来的不便,我们深表歉意。
使您的界面扩展可序列化类
public interface MyMapInterface extends Serializable {
void onMap(LatLng ltlng);
}
然后,像这样在意图 MapActivity.java 中传递接口对象:
intent.putExtra("MyMapInterface", this);
startActivity(intent);
然后输入 MainActivity.java :
myMapInterface = getIntent().getSerializableExtra("MyMapInterface");