导航抽屉和MapFragment

moi*_*tab 5 android google-maps android-layout android-fragments

我想知道用导航抽屉实现MapFragment的正确方法是什么.我已经有了这个工作正常,但我一直在阅读一些文档,也许它可能会导致将来的麻烦.

因此,我实现导航抽屉的主类是非常正常的,使用以下selectItem()方法:

HomeActivity extends Activity{

//...
//Stuff like onCreate(), etc.
//...

private void selectItem(int position) {
    if (position == 0) {  //Position 0 is the map option in the navigationDrawer
        Fragment fragment = new MapaFragment();
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
    }
    mDrawerList.setItemChecked(position, true);
    setTitle(listaElementosDrawer[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
    }
}
Run Code Online (Sandbox Code Playgroud)

MapaFragment是主要活动中膨胀的片段,如下所示:

public class MapaFragment extends Fragment {

public MapaFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_map, container,
            false);
    return rootView;
}
}
Run Code Online (Sandbox Code Playgroud)

而且,fragment_map.xml这是在膨胀MapaFragment是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.moictab.decanias.MapActivity$PlaceholderFragment" >

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

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

请注意,这是RelativeLayout中的mapFragment,它已经运行良好.但是,如果我删除了RelativeLayout并且我只留下了mapFragment,它会崩溃,因为我在片段内部膨胀一个片段.所以,有一些问题:

  • 为什么它在膨胀mapFragment时会崩溃但是在使用mapFragment内部膨胀RelativeLayout时它不会崩溃?它本质上是不一样的吗?
  • 实现类似的东西的正确方法是什么?

小智 1

我对 MapFragment 遇到了非常相似的问题。这是我的解决方案:

我扩展了 SupportMapFragment 对象:

public class MyMapFragment extends SupportMapFramgment
{

}
Run Code Online (Sandbox Code Playgroud)

并以编程方式添加它:

MyMapFragment fragment = new MyMapFragment();
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).commit();
Run Code Online (Sandbox Code Playgroud)