android - 使用另一个类的地图片段
问题描述
我想使用另一个类的地图片段,称为 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 未被调用
解决方案
如果我理解正确,您想从 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");
推荐阅读
- php - Laravel 使用 BelongsToMany 中关联的类别过滤用户
- lua - 如何在获得地址的同时获得表格的行
- javascript - 类型“未知”不可分配给类型“从不”.ts(2322)
- elasticsearch - 如何使用 ElasticSearch 获取 PDF 中文本的确切位置?
- javascript - 如何使用 JSON 使具有多个角色的成员静音?
- google-sheets - 如何按字母顺序对一组单元格进行排序 - Google 表格
- angularjs - 使用angularjs运行业力单元测试时如何解决“无法在模块外使用导入语句”?
- google-cloud-platform - 缺少 IAM 和管理菜单选项
- docker - EC2 中的 Docker 容器无法通过 AWS SDK 将数据写入 AWS S3
- javascript - 如何在 node.js 中的特定持续时间后强制解决承诺?