Android fragments 在片段中映射片段V2
我在Google地图片段中遇到了一些问题“getmap()上的空指针表达式”。我想在片段中插入mapfragment 请检查代码,并告知我是否采取了正确的方法。。 让我知道我需要对代码做什么才能让它工作 我的布局文件:Android fragments 在片段中映射片段V2,android-fragments,google-maps-android-api-2,mapfragment,Android Fragments,Google Maps Android Api 2,Mapfragment,我在Google地图片段中遇到了一些问题“getmap()上的空指针表达式”。我想在片段中插入mapfragment 请检查代码,并告知我是否采取了正确的方法。。 让我知道我需要对代码做什么才能让它工作 我的布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_wi
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/bg2"
android:weightSum="100">
<Button
android:id="@+id/perx_button"
android:layout_marginTop="70dip"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/perx_card_btn" />
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
public class PerxDetailedFragment extends SupportMapFragment {
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(53.551, 9.993);
GoogleMap map;
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
if (fmap == null) {
fmap = SupportMapFragment.newInstance();
ft.add(R.id.map, fmap);
}
ft.commit();
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
.title("Hamburg"));
Marker kiel = map.addMarker(new MarkerOptions()
.position(KIEL)
.title("Kiel")
.snippet("Kiel is cool")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher)));
// Move the camera instantly to hamburg with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));
// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
return inflater.inflate(R.layout.perx_detailed, null, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
公共类PerxDetailedFragment扩展了SupportMapFragment{
静态最终车床汉堡=新车床(53.558,9.927);
静态最终车床基尔=新车床(53.551,9.993);
谷歌地图;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
FragmentTransaction ft=getFragmentManager().beginTransaction();
map=((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map))
.getMap();
SupportMapFragment fmap=(SupportMapFragment)getFragmentManager().findFragmentById(R.id.map);
如果(fmap==null){
fmap=SupportMapFragment.newInstance();
ft.add(R.id.map,fmap);
}
ft.commit();
Marker hamburg=map.addMarker(新MarkerOptions().position(hamburg)
.名称(“汉堡”);
Marker kiel=map.addMarker(新MarkerOptions()
.职位(基尔)
.标题(“基尔”)
.片段(“基尔很酷”)
.图标(位图描述符工厂)
.fromResource(R.drawable.ic_启动器));
//将相机立即移动到汉堡,变焦为15。
map.moveCamera(CameraUpdateFactory.newLatLngZoom(汉堡,15));
//放大,设置摄影机动画。
animateCamera(CameraUpdateFactory.zoomTo(10),2000年,空);
返回充气机。充气(R.layout.perx_详细,空,假);
}
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
}
}
删除所有fmap代码:
SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
if (fmap == null) {
fmap = SupportMapFragment.newInstance();
ft.add(R.id.map, fmap);
}
您已经有一个map实例保存为“map”变量,因此请使用该实例。您需要首先对布局进行充气。问题是您在onCreateView的末尾执行此操作,因此在调用findFragmentById时映射片段不存在 此外,PerxDetailedFragment应该扩展Fragment,而不是SupportMapFragment
public class PerxDetailedFragment extends Fragment {
// ...
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.perx_detailed, null, false);
map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
//...
return v;
}
您需要扩展SupportMapFragment
public class MapFragment extends SupportMapFragment{
GoogleMap mGoogleMap;
Context mContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mContext=getActivity();
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
initializeMap(rootView);
return rootView;
}
void initializeMap(View rootView)
{
if (mGoogleMap == null) {
mGoogleMap=((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map4)).getMap();
// Getting Map for the SupportMapFragment
mGoogleMap.setMyLocationEnabled(true);
if (mGoogleMap == null) {
Toast.makeText(getActivity().getApplicationContext(),"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
} else {
setMapDefualtProp();
}
}else
setMapDefualtProp();
}
private void setMapDefualtProp() {
mGoogleMap.setMyLocationEnabled(true);
mGoogleMap.setTrafficEnabled(true);
mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
mGoogleMap.getUiSettings().setRotateGesturesEnabled(true);
mGoogleMap.getUiSettings().setCompassEnabled(true);
mGoogleMap.getUiSettings().setZoomGesturesEnabled(true);
mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
}
}
gMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();