2016-09-06 4 views
0

У меня есть фрагмент, который отображает mapview.Меню не создается при создании фрагмента, но работает над возобновлением

Мне нужно раздуть макет меню из фрагмента, и я добавил setHasOptionsMenu(true) в код, чтобы панель меню могла раздуваться из фрагмента.

Но интересно то, что он не появляется, когда фрагмент загружается в первый раз. Но если я перейду к другому фрагменту и вернусь к этому фрагменту, панель меню снова появится. Я понятия не имею, почему он не появляется в первую очередь.

Что нужно сделать? Может ли кто-нибудь помочь?

Ниже приведено содержание макета фрагмента.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

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

</LinearLayout> 

Это класс java.

 public class SearchFragment extends Fragment implements GoogleMap.InfoWindowAdapter, 
       GoogleMap.OnInfoWindowClickListener, LocationListener, OnMapReadyCallback { 

      @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      Log.i(TAG, "onCreateView()"); 

      rootView = inflater.inflate(R.layout.fragment_search, container, false); 
      setHasOptionsMenu(true); 
      MapsInitializer.initialize(this.getActivity()); 
      mMapView = (MapView) rootView.findViewById(R.id.map); 
      mMapView.onCreate(savedInstanceState); 

      mMapView.getMapAsync(this); 

      this.markers = new HashMap<>(); 
      this.activity = (MainActivity) this.getActivity(); 

      return rootView; 
     } 

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      Log.i(TAG, "onCreateOptionsMenu()"); 
      super.onCreateOptionsMenu(menu, inflater); 
      menu.clear(); 
       this.activity.getMenuInflater().inflate(R.menu.menu_search, menu); 

     } 

@Override 
    public void onMapReady(GoogleMap map) { 
     Log.i(TAG, "onMapReady"); 
     map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

     try { 
      if (checkScanPermissions()) { 
       map.setMyLocationEnabled(true); 
       map.animateCamera(CameraUpdateFactory.newLatLngZoom(getLocation(), 18)); 
      } 
     } catch (SecurityException e) { 
      Log.e(TAG, "Permission to location not granted"); 
     } 
     map.setBuildingsEnabled(true); 
     map.getUiSettings().setZoomControlsEnabled(true); 

     map.setInfoWindowAdapter(this); 
     map.setOnInfoWindowClickListener(this); 

     this.mMap = map; 

     setUpMap(false); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.i(TAG, "onLocationChanged"); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.i(TAG, "onCreate()"); 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     Log.i(TAG, "onSaveInstanceState()"); 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    public void onLowMemory() { 
     Log.i(TAG, "onLowMemory()"); 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 
    } 

    @Override 
    public void onResume() { 
     Log.i(TAG, "onResume()"); 
     super.onResume(); 
     setHasOptionsMenu(true); 
     mMapView.onResume(); 
    } 
} 

ответ

0

Вы пытались удалить menu.clear(); от onCreateOptionsMenu?

+0

отпечатке Я дал в функции даже не приходит 'Log.i (TAG, "onCreateOptionsMenu()");' когда я загружаю его в первый раз. Но придет, когда я верну фрагмент из другого. –

0

Эта строка: setHasOptionsMenu (true); - это неправильный метод. Должно быть в onCreate.

добавить следующее:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setHasOptionsMenu(true); 
} 
Смежные вопросы