您好我在我的项目中使用导航抽屉和多个片段。 在我的片段中,我有一个动态添加的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;
}
答案 0 :(得分:3)
首先,在将container.removeAllViews()
添加到容器之前,您无需致电fragmentTransaction.remove(mapFragment)
和MapFragment
。
您将MapFragment
动态插入与所有其他视图相同的容器中。
您的MapFragment
位于容器内所有其他视图的前面,这就是您无法看到它们的原因。
您可以让孩子FrameLayout
在您的父MapFragment
内插入FrameLayout
。
不要忘记将android:id="@+id/mapContainer"
添加到子FrameLayout
并将其从父FrameLayout
中删除。这样,其他组件就会可见。
我应该警告你,你不应该在另一个Fragment
内加载Fragment
,不建议这样做。