2016-09-06 11 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); 
} 
関連する問題