java - getsupportfragmentmanager().findfragmentbyid(r.id.map) 返回 null 谷歌地图
问题描述
我尝试在我的 MainActivity 上使用谷歌地图功能我有这个空指针返回:getsupportfragmentmanager().findfragmentbyid(r.id.map); ==> 返回空值
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapApi);
mapfragment 将为空,当我使用 getMapAsync(this) 调用它时;应用程序在启动前关闭
mapFragment.getMapAsync(this); // null pointer variable call getMapAsync
content_main.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="216dp"
android:orientation="horizontal">
<fragment
android:id="@+id/mapApi"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
MainActivity 内的 onCreate :
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener , OnMapReadyCallback {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main); didn't work
setContentView(R.layout.content_main); // worked, now i haven't null pointer
System.out.println("************************ mapApi:"+R.id.mapApi);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapApi);
System.out.println("************************ mapFragment:"+mapFragment);
if (mapFragment != null) {
mapFragment.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
LatLng BordjMenaielGare = new LatLng(36.753162, 3.717716);
LatLng Blida = new LatLng(36.769038, 3.057451);
map.addMarker(new MarkerOptions().position(BordjMenaielGare).title("Gare Bordj Menaiel "));
map.addMarker(new MarkerOptions().position(Blida).title("Gare Agha"));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(BordjMenaielGare, 10));
}
}
这是文件:
地图片段在 content_main.xml 上,我将它包含在 app_bar_main.xml 中,app_bar_main 包含在 activity_main.xml 中,我从 MainActivity 调用地图
我在 StackOverflow 中搜索了很多,但没有一个解决方案对我的情况有效
有人可以帮我弄这个吗?
解决方案
你需要打电话:
// add this (supplying the layout for your activity)
setContentView(R.layout.activity);
在您致电后super.onCreate(savedInstanceState);
推荐阅读
- raspberry-pi - 找不到 SPI 设备
- c++ - TransmitFile sending the same bytes again and again
- python - 在 Mongoengine 中,如何拥有一个引用父文档类型的嵌入文档^
- java - "No setter/field for field found on class"
- scala - scala文件中的RDD处理
- node.js - (Typescript/Node/Swagger) Create a version 2 of an api with little changes. How can I redirect v2 calls to v1 calls?
- css - 为什么 ul 选择器在链接的 CSS 文件中不起作用?
- mysql - 当列变量在其他列中时,SQL如何更新行中的列
- php - Exclude event if already registered for it
- javascript - res.send 来自异步函数的数据