2016-03-24 21 views
0

私のクラスの1つにアプリケーションを作成しています。地図上にマーカーを表示する必要があります。 2つの奇妙なことが起こっています:まず、onMapReadyが2回実行されていて、2番目に、マーカーがマップに表示されていません。私はあなたのいくつかは、マーカーがマップ上に表示されていない理由を私は把握を助けることができるだろう期待していたAndroidのGoogleマップにマーカーが表示されない

public class MapFragment extends SupportMapFragment implements OnMapReadyCallback { 

private GoogleMap mMap; 
private Event mEventSelected; 
private Person mPersonSelected; 
private Map<Marker, Event> mMapMarkers; 
private List<Polyline> mLines; 
private TextView mPersonFullName; 
private TextView mEventDescription; 
private LinearLayout mMapEvent; 
private ImageView mEventIcon; 
private MenuItem searchIcon; 
private MenuItem filterIcon; 
private MenuItem settingsIcon; 
private MenuItem topIcon; 
private String EVENT_ID; 


@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    mMapMarkers = new HashMap<>(); 
    mLines = new ArrayList<>(); 
    mEventSelected = null; 
    mPersonSelected = null; 

    getMapAsync(this); 

} 

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

    super.onCreateView(inflater, container, savedInstanceState); 
    View v = inflater.inflate(R.layout.fragment_map, container, false); 
    drawDefaultLayout(v); 
    return v; 
} 
private void pinEvents() { 
    mMap.clear(); 
    Map <String, Event> events = FamilyMapData.getEvents(); 

    for (Event event : events.values()) 
    { 
     LatLng coordinates = new LatLng(event.getLatitude(), event.getLongitude()); 
     String description = event.getDescription(); 
     float color = 0; 
     switch (description){ 
      case "baptism":{ 
       color = BitmapDescriptorFactory.HUE_CYAN; 
       break; 
      } 
      case "birth":{ 
       color = BitmapDescriptorFactory.HUE_BLUE; 
       break; 
      } 
      case "death":{ 
       color = BitmapDescriptorFactory.HUE_AZURE; 
       break; 
      } 
      case "marriage":{ 
       color = BitmapDescriptorFactory.HUE_RED; 
       break; 
      } 
      case "christening":{ 
       color = BitmapDescriptorFactory.HUE_ORANGE; 
       break; 
      } 
      case "census": 
      { 
       color = BitmapDescriptorFactory.HUE_GREEN; 
       break; 
      } 
     } 


     mMapMarkers.put(mMap.addMarker(new MarkerOptions().position(coordinates).icon(BitmapDescriptorFactory.defaultMarker(color))), event); 

    } 
} 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    pinEvents(); 
} 

:これは私のコードです。

は、事前に

EDIT

をいただき、ありがとうございます。これは、xmlです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 


<fragment 
    android:id="@+id/map" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_weight="5"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:clickable="true" 
     android:baselineAligned="false" 
     android:id="@+id/map_event"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:id="@+id/icon_event_divisor"> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:paddingTop="40dp" 
       android:paddingBottom="40dp" 
       android:paddingStart="20dp" 
       android:paddingEnd="20dp" 
       android:clickable="false" 
       android:layout_gravity="center" 
       android:id="@+id/event_icon"/> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_gravity="center" 
      > 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/person_full_name" 
        android:textSize="30sp" 
        android:id="@id/person_full_name"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="25sp" 
        android:text="@string/event_description" 
        android:layout_below="@id/person_full_name" 
        android:id="@+id/event_description"/> 

      </RelativeLayout> 

     </LinearLayout> 


    </LinearLayout> 

答えて

0

私はあなたのonMapReady機能が全くトリガされないと思います。 したがって、pinEvents関数もトリガーされません。

onMapReady()をトリガするにはgetMapAsync()を呼び出す必要があります。ここではonCreateで行った操作はまだ作成されていないので、onCreateViewで行います。

混乱を避けるため、Googleマップに関連するMapFragmentとSupportMapFragmentがあるため、クラスの名前を変更することをお勧めします。

サポートフラグメントを使用している場合は、次のようにコードを変更する必要があります。エルス

SupportMapFragment mapFragment = ((SupportMapFragment)getActivity().getSupportFragmentManager()) 
         .findFragmentById(R.id.map); 
        mapFragment.getMapAsync(this); 

このいずれかを使用します。このことができます

MapFragment mapFragment = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
       mapFragment.getMapAsync(this); 

希望を。

+0

ご返信ありがとうございます。 私はそれをやってみましたが、mapFragmentはnullなので、getMapAsyncを呼び出すとNullPointerExceptionが発生します。 –

+0

xmlも投稿できますか? –

+0

完了、私はそれを前に置くべきだった、私に思い出させてくれてありがとう。 –

関連する問題