View on top of map disappears while using it with a DrawerLayout

大憨熊 提交于 2019-12-11 13:53:29

问题


I'm creating a layout which contains a maps (com.google.android.gms.maps.SupportMapFragment) & a mini layout to enter origin & destination(pickup_dropoff_LL LinearLayout).

XML

<RelativeLayout
    android:id="@+id/main_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rideType_LL">

        <include
            android:id="@+id/pickup_dropoff_LL"
            layout="@layout/layout_pickup_dropoff"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="10dp" />

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MapsActivity" />

</RelativeLayout>

Initially this had a corresponding Activity but I had to introduce a DrawerLayout so I had to convert it to a Fragment.

After doing that my pickup_dropoff_LL disappears. It is shown on the screen for a micro second and then it disappears.

I suspect the issue is somewhere here but I'm not sure.

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

    View rootView = inflater.inflate(R.layout.activity_main_activity, container, false);

    fm = new SupportMapFragment() {
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            map = fm.getMap();
            if (map != null) {
                map.setMyLocationEnabled(true);
                fm.getMapAsync(MainActivity2.this);


            }
        }
    };
    getChildFragmentManager().beginTransaction().add(R.id.main_RL, fm).commit();

    return rootView;
}

1. I checked visibility for pickup_dropoff_LL. It's showing as 0, which means View.VISIBLE. But it is not visible.

2. As suggested by some links, I tried placing an empty view of same height & width over my map. Even that didn't work.

So how do I stop the view from disappearing?? Please help.


回答1:


Try drawing your layout last. Put the Include after the Fragment

<RelativeLayout
    android:id="@+id/main_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rideType_LL">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MapsActivity" />

        <include
            android:id="@+id/pickup_dropoff_LL"
            layout="@layout/layout_pickup_dropoff"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="10dp" />
</RelativeLayout>



回答2:


Have you tried moving your content inside of your drawer and not behind it?

<!-- Drawer Host inside the parent relative layout -->
<android.support.v4.widget.DrawerLayout
    android:id="@+id/main_drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <!-- Hold Fragment here -->
    <FrameLayout
        android:id="@+id/frag_main_host"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

     <!-- Drawer -->
     <RelativeLayout
          android:id="@+id/drawer_pane"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:layout_gravity="start">
          <!-- Menu list for drawer -->
          <ListView
              android:id="@+id/menu_list"
              android:layout_height="match_parent"
              android:layout_width="280dp"
              android:dividerHeight="1sp"
              android:gravity="start"
              android:choiceMode="singleChoice" />
     </RelativeLayout>
 </android.support.v4.widget.DrawerLayout>

Putting anything below your view would make it not appear when opened although it is visible in property. In your class you can swap the fragment as desired by calling the fragment manager and seleting a fragment at whatever list index is selected. I suggest use an internal listener and just call a method to pick the view and swap it. Like below:

Listener (Internal class):

class MainDrawerItemClickListener implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> adapter, View view, int position, long id ){
            getView(position);
            // close the drawers once selected 
            mDrawerLayout.closeDrawers();
     }
}

That method will call this method in your main class:

     // select the view 
     public void getView( int position ){
          Fragment frag = null;
          switch( position ){
             case 0:
                frag = new MyFragment();
                break;
             case 1:
                frag = new MyOtherFragment();
                break;

              default:
                 break;
           }

          if( frag != null ){

             swapView( frag );
          }

}


// swaps the fragments
public void swapView( Fragment frag ){ 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
     ft.replace( R.id.frag_main_host, frag ).commit();
}

Hope it helps, I know this is an old question, but I am sure someone will have the same question.



来源:https://stackoverflow.com/questions/33921165/view-on-top-of-map-disappears-while-using-it-with-a-drawerlayout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!