SupportMapFragment
を動的に作成し、FrameLayout
コンテナに挿入しようとしています。SupportMapFragmentのgetMap()がnullを返します
私の問題はmMapFragment.getMap()
戻っnull
が...
誰を助けることができるということですか? FragmentTransaction
上
CenterMapFragment.java
public class CenterMapFragment extends Fragment {
private SupportMapFragment mMapFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.center_map_fragment, container, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS) {
setUpMapIfNeeded();
}
}
private void setUpMapIfNeeded() {
if (mMapFragment == null) {
mMapFragment = SupportMapFragment.newInstance();
FragmentTransaction fragmentTransaction =
getChildFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.map, mMapFragment);
fragmentTransaction.commit();
setUpMap();
}
}
private void setUpMap() {
GoogleMap map = mMapFragment.getMap();
// map is null!
}
@Override
public void onResume()
{
super.onResume();
setUpMapIfNeeded();
}
}
center_map_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<Button
android:id="@+id/btn_loc"
android:layout_width="60dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@drawable/locbtn" />
</RelativeLayout>
'CenterMapFragment'が' SupportMapFragment'を拡張する場合、どのようにマップを 'FrameLayout'に設定できますか?私はレイアウトを変更する必要がありますか? – jul
@jul:1つのアプローチでは、 'CenterMapFragment'が、' SupportMapFragment'が作成したものを得るために 'super.onCreateView()'を最初に呼び出した 'onCreateView()'を実装しています。次に、 'FrameLayout'を作成し、' Super'で作成した 'View'を' FrameLayout'の子として追加します。そして 'onCreateView()'から 'FrameLayout'を返します。 'SupportMapFragment'の内容は、' CenterMapFragment'が望むものであれば、それをラップします。あるいは、 'CenterMapFragment'を通常の' Fragment'だけにし、 'SupportMapFragment'の代わりに' MapView'を使用してください。あるいは、あなたの現在のコードで 'setUpMap()'を呼び出すより良い時期を見つけてください。 – CommonsWare
私は 'MapView'を使用します。 – jul