gpt4 book ai didi

android - 为什么我用 FragmentManager 去查找 map 时返回 NULL?

转载 作者:行者123 更新时间:2023-11-30 02:33:06 25 4
gpt4 key购买 nike

嗨,当我从 Fragment Manager 对象获取 map 时,我去寻找 map fragment ,它返回 null,为什么?

我的代码是:

public class MapaFragment extends Fragment  {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);

android.app.FragmentManager fragmentManager = getFragmentManager();
MapFragment mapFragment = (MapFragment) fragmentManager.findFragmentById(R.id.map);
GoogleMap map = mapFragment.getMap();

return v;
}
...
}

mapFragment 中的这段代码为空,显然我无法获取 GoogleMap。 LogCat 在该行中给我 NullPointer 错误。

我的 fragment 是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />

</LinearLayout>

我认为正确的权限和 list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.android"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />

<permission
android:name="info.android.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />

<uses-permission android:name="info.android.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
<meta-data
android:name="com.google.android.gms.version"
android:value="6171000" />

<activity
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".LoginActivity"
android:label="Login" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ImagenActivity"
android:label="@string/title_activity_imagen" >
</activity>
</application>

</manifest>

我得到这个屏幕:

enter image description here

我正在使用的配置屏幕是:

enter image description here

最佳答案

编辑:您用于测试的设备需要 Google Play 服务。参见 this article获取有关设置模拟器的指南。

将布局的 XML 更改为此,并记下 XML 文件的名称:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<com.google.android.gms.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map" />

</LinearLayout>

例如,如果文件名为 map_fragment_layout.xml,请将 View v 更改为以下内容:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.map_fragment_layout, null);

MapView mapView = (MapView) v.findViewById(R.id.map);
GoogleMap map = mapView.getMap();

return v;
}

另一种选择:扩展 MapFragment
此选项与前一个选项完全无关。在这种情况下,您不会创建、分配或扩充 XML 文件。 View 以编程方式生成。

public static class MapaFragment extends MapFragment {

GoogleMap mMap;

@Override
public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2){
View v = super.onCreateView(arg0,arg1,arg2);
mMap = getMap();
return v;
}
}

关于android - 为什么我用 FragmentManager 去查找 map 时返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com