MapFragment隐藏片段中的所有内容

时间:2014-07-27 16:52:38

标签: android android-fragments navigation-drawer mapfragment

您好我在我的项目中使用导航抽屉和多个片段。 在我的片段中,我有一个动态添加的mapfragment。

现在,当该片段加载时,它会隐藏父片段中的所有其他视图。

当我点击其他片段并返回包含地图的片段时 地图不可见。

以下是我的片段xml

<FrameLayout 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=".MapActivity" 
    android:id="@+id/mapContainer">


    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    <Button android:id="@+id/btnSearch"
        android:text="Search"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        />
    <EditText android:id="@+id/etSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Search"/>
    </LinearLayout>
</FrameLayout>

以下是我的片段java文件。

public class MyRouteFragment extends Fragment {

    public MyRouteFragment(){}
    EditText etSearchValue;
    private LatLng myPos;
    UserData user;
    View rootView;
    GoogleMap mapView;
    MapFragment mapFragment;
    List<Marker> markers=new ArrayList<Marker>();
    LocationsDataSource lDataSource;
    public ProgressDialog pDialog=null;
    FragmentManager mFragmentManager;
    GoogleMapOptions options;
    String address,TAG="MyMapTag";
    Button btnSearch;

    public static MyRouteFragment newInstance(LatLng position){
        MyRouteFragment frag=new MyRouteFragment();
        frag.myPos=position;
        return frag;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.fragment_my_route, container, false);
        btnSearch=(Button) rootView.findViewById(R.id.btnSearch);
        etSearchValue=(EditText) rootView.findViewById(R.id.etSearch);
        mFragmentManager=getFragmentManager();

        mapFragment=(MapFragment) mFragmentManager.findFragmentByTag(TAG);
        if(mapFragment==null){
            mapFragment=MapFragment.newInstance();

            FragmentTransaction fragmentTransaction=mFragmentManager.beginTransaction();

            fragmentTransaction.add(R.id.mapContainer,mapFragment,TAG);

            fragmentTransaction.commit();
            }
            //btnSearch.getParent().bringChildToFront(btnSearch);
            /*btnSearch.invalidate();
            etSearchValue.invalidate();
            btnSearch.bringToFront();
            etSearchValue.invalidate();
            btnSearch.invalidate();
            */
            //container.removeView(btnSearch);
            //container.addView(btnSearch);
            //container.addView(etSearchValue);

        //mapFragment=(MapFragment) mFragmentManager.findFragmentById(R.id.map);

        mapView=mapFragment.getMap();
        if(mapView!=null){
            mapView.setPadding(0, 20, 0, 0);
            mapView.setMyLocationEnabled(true);

        }

        btnSearch.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new getFormattedAddress().execute();
            }
        });

        //btnSearch.bringToFront();


        //etSearchValue.bringToFront();
        return rootView;
    }

1 个答案:

答案 0 :(得分:3)

首先,在将container.removeAllViews()添加到容器之前,您无需致电fragmentTransaction.remove(mapFragment)MapFragment

您将MapFragment动态插入与所有其他视图相同的容器中。 您的MapFragment位于容器内所有其他视图的前面,这就是您无法看到它们的原因。

您可以让孩子FrameLayout在您的父MapFragment内插入FrameLayout。 不要忘记将android:id="@+id/mapContainer"添加到子FrameLayout并将其从父FrameLayout中删除。这样,其他组件就会可见。

我应该警告你,你不应该在另一个Fragment内加载Fragment,不建议这样做。