我正在尝试创建一个具有一个活动和多个片段的Android应用。 每个片段在视图中都会占用整个屏幕,并且在替换事务时它应该切换到另一个片段。
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
这是片段的容器。 问题是我想要使用的片段是GoogleMap。这是我的地图片段代码:
public class Map extends Fragment{
private final static String TAG = "MAP Fragment";
public GoogleMap googleMap = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setUpMapIfNeeded();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.map_fragment, null);
return view;
}
private void setUpMapIfNeeded()
{
if(googleMap == null)
{
googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();
if(googleMap != null)
{
GoogleMapOptions options = new GoogleMapOptions();
options.mapType(GoogleMap.MAP_TYPE_NORMAL)
.camera(new CameraPosition(new LatLng(25f, 47f), 13f, 0f, 0f));
}
else
{
Log.d(TAG, "googleMap is null !!!!!!!!!!!!!!!");
}
}
}
}
它的布局:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
在主要活动中:
@Override
protected void onCreate(Bundle savedInstanceState)
{
Map test = new Map();
getSupportFragmentManager().beginTransaction()
.add(R.id.content_frame, test)
.commit();
}
我在以下位置得到一个空指针异常:(我相信它找不到R.id.map)
googleMap = ((MapFragment) getActivity().getFragmentManager()
.findFragmentById(R.id.map)).getMap();
如果我不使用“getActivity()”。它说它无法从Fragment转换为MapFragment。
我需要“googleMap”才能在地图上创建标记。
当我创建相同的应用程序但没有片段(我的主要活动在地图上显示并且我没有其他片段)时,正常工作正常。
我发现了类似的主题:Google Maps API v2 Custom MapFragment + SimpleFragment和error using maps in fragment。 但是,如果我扩展FragmentActivity或SupportMapFragment,我无法使用事务替换另一个片段。
结论:我希望当一个动作发生时(点击或其他)我只需要像这样替换碎片:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
我做错了什么?或者我应该采取不同的方法解决问题?
(P.S。我对android很新)
答案 0 :(得分:1)
问题是我在setUpMapIfNeeded()
中调用onCreate()
之前尝试更改地图元素(视图仅在onCreateView()
中充气)。
如果我在setUpMapIfNeeded()
中移动电话onResume()
,一切正常,因为视图会膨胀,并且可以使用地图并进行修改。