2017-05-31 4 views
0

AlertDialogにGoogleマップがありました。最近、私のMapViewはnullになるので、Googleが地図を取得するために非同期の方法を使用することがわかった。コードを更新しましたが、機能しません。 MapViewは常にnullです。MapMapを使用したダイアログのGoogleMapFragment

final Dialog dialog = new Dialog(mainActivity);  
MapView mMapView = (MapView) dialog.findViewById(R.id.mapView); 

MapsInitializer.initialize(mainActivity); 

mMapView = (MapView) dialog.findViewById(R.id.mapView); 
if (**mMapView** != null) { 
    mMapView.onCreate(dialog.onSaveInstanceState()); 
    mMapView.onResume();// needed to get the map to display immediately 
    OnMapReadyCallback onMapReadyCallback = new OnMapReadyCallback() { 
     @Override 
     public void onMapReady(final GoogleMap googleMap) { 
      if (googleMap != null) { 

       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
       dialog.setContentView(R.layout.dialogmap); 
       dialog.show(); googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
       if (myLocation != null) { 

        double latitude = myLocation.getLatitude(); 
        double longitude = myLocation.getLongitude(); 
        CameraPosition cameraPosition = new CameraPosition.Builder() 
          .target(new LatLng(latitude, longitude)).zoom(16.0F).build(); 
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

        googleMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { 
         @Override 
         public void onMarkerDragStart(Marker arg0) { 
          // TODO Auto-generated method stub 
          Log.e("System out", "onMarkerDragStart..." + arg0.getPosition().latitude + "..." + arg0.getPosition().longitude); 
         } 

         @SuppressWarnings("unchecked") 
         @Override 
         public void onMarkerDragEnd(final Marker arg0) { 
          // TODO Auto-generated method stub 
          Log.e("System out", "onMarkerDragEnd..." + arg0.getPosition().latitude + "..." + arg0.getPosition().longitude); 

       googleMap.animateCamera(CameraUpdateFactory.newLatLng(arg0.getPosition())); 
          if (dialog.findViewById(R.id.bar_save) != null) { 
                    dialog.findViewById(R.id.bar_save).findViewById(R.id.annuler).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View view) { 
                         localisation.setText(arg0.getPosition().latitude + " " + arg0.getPosition().longitude); 
            } 
           }); 
           dialog.findViewById(R.id.bar_save).findViewById(R.id.enregistrer).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View view) {           

             dialog.dismiss(); 

            } 
           }); 
          } 
         } 

         @Override 
         public void onMarkerDrag(Marker arg0) { 
          // TODO Auto-generated method stub 
          Log.i("System out", "onMarkerDrag..."); 
         } 
        }); 
        MarkerOptions marker0 = new MarkerOptions().position(new LatLng(latitude, longitude)).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)).title("Infraction"); 
        marker0.draggable(true); 
        googleMap.addMarker(marker0); 

       } 
      } 
     } 
    }; 
    mMapView.getMapAsync(onMapReadyCallback); 

    // latitude and longitude 

}else 
    Toast.makeText(mainActivity,"MapView is null",Toast.LENGTH_SHORT).show(); 

}

私はマップを処理するための新しい方法を追加した場合でも、MapViewのはまだnullです。これは、私がダイアログ内で膨らませた私のXMLビューです。

<RelativeLayout 
    android:id="@+id/mapHolder_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/legend" > 

    <com.google.android.gms.maps.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/mapView" 
     android:background="@color/TealLight" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

答えて

0

Dialogからfinalを削除するか、グローバルレベルで宣言します。

+0

ありがとうございました。 – Euphor08

0

DialogFragmentを(ダイアログではなく)サブクラス化し、正常なフラグメントでGoogleが行うように、ライフサイクルコールバックを使用してMapViewを実装するほうがずっと良いと思います。

関連する問題