2016-12-05 5 views
0

Ich stehe vor dem Problem, detaillierte Informationen (Daten) von Marker zu NestedScrollView von BottomSheet zu bekommen. Wenn ich Marker geklickt habe, scrollt NestedScrollView von unten nach oben und zeigt die entsprechenden Daten an. Ich benutze json um Daten zu bekommen.Wie man Daten vom Marker zum BottomSheet bekommt, wenn Marker auf Google Map klickt

Mein Quellcode:

public class SeekingMapActivity extends AppCompatActivity implements 
    GoogleApiClient.OnConnectionFailedListener, 
    GoogleApiClient.ConnectionCallbacks, 
    View.OnClickListener { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_seeking_main); 

    ... 

    ArrayList<HashMap<String, String>> location = null; 
    String url = "myURL"; 
    try { 
     JSONArray data = new JSONArray(getHttpGet(url)); 
     location = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> map; 

     for (int i = 0; i < data.length(); i++) { 
      JSONObject c = data.getJSONObject(i); 

      map = new HashMap<String, String>(); 
      map.put("title", c.getString("title")); 
      map.put("avatar", c.getString("avatar")); 
      map.put("lat", c.getString("lat")); 
      map.put("mapLong", c.getString("mapLong")); 
      map.put("address", c.getString("address")); 
      location.add(map); 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    // googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

    IconGenerator tc = new IconGenerator(this); 
    String price = "1200K"; 
    Bitmap bmp = tc.makeIcon(price); // pass the text you want. 

    lat = Double.parseDouble(location.get(0).get("lat").toString()); 
    mapLong = Double.parseDouble(location.get(0).get("mapLong").toString()); 

    LatLng coordinate = new LatLng(lat, mapLong); 
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    googleMap.getUiSettings().setMapToolbarEnabled(false); 
    googleMap.getUiSettings().setRotateGesturesEnabled(true);  // Enable RotateGestures 
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 15)); 

    for (int i = 0; i < location.size(); i++) { 

     lat = Double.parseDouble(location.get(i).get("lat").toString()); 
     mapLong = Double.parseDouble(location.get(i).get("mapLong").toString()); 

     String title = location.get(i).get("title").toString(); 
     String avatar = location.get(i).get("avatar".toString()); 
     String address = location.get(i).get("address").toString(); 

     MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, mapLong)) 
       .title(title) 
       .snippet(address) 
       .icon(BitmapDescriptorFactory.fromBitmap(bmp)); // .anchor(0.5f, 0.6f) 
     googleMap.addMarker(marker); 

     googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
     { 
      @Override 
      public boolean onMarkerClick(Marker arg0) { 
       if(isClick==false) 
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
       else 
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 

       isClick=!isClick; 
       // Toast.makeText(SeekingMapActivity.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast 
       return true; 
      } 
     }); 
    } 
} 
... 

}

Layout BottomSheet:

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/bottom_sheet" 
    android:layout_width="match_parent" 
    android:layout_height="270dp" 
    android:clipToPadding="true" 
    android:background="@color/white" 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 
    > <!--   android:background="@android:color/background_holo_light" --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/mercedes"/> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:text="1,200,000" 
      android:textSize="20dp" 
      android:textStyle="bold"/> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 
       <TextView 
        android:id="@+id/textView1b" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Số cửa: 4 cửa" 
        android:textSize="14dp"/> 
       <!-- android:textAppearance="?android:attr/textAppearanceMedium" --> 
       <TextView 
        android:id="@+id/textView1c" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Số ghế: 4 chỗ" 
        android:textSize="14dp"/> 
       </LinearLayout> 

     <TextView 
      android:id="@+id/textView1d" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Địa chỉ: Quân Cầu giấy, Hà Nội" 
      android:textSize="14dp" /> 

     <TextView 
      android:id="@+id/textView1e" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="KIỂM TRA TÌNH TRẠNG XE" 
      android:textStyle="bold" 
      android:textColor="@color/greenColor"/> 

    </LinearLayout> 
</android.support.v4.widget.NestedScrollView> 

Ich weiß nicht, wie

Daten von Hersteller zu NestedScrollView bekommen

Beispiel:

When click: Marker A, data of marker A will display on NestedScrollView 
      Marker B, data of marker B will display on NestedScrollView 

Wenn Sie weitere Informationen benötigen, werde ich mehr posten!

Antwort

1

1 - Erstellen Modellklasse mit Attributen wie Titel, avatar, Adresse etc ...

2 - Erstellen eine Arraylist Ihres Modelltypen

3 - Fügen Sie all diese Daten in Ihrer Arraylist

4 - Jetzt in onMarkerClick Methode der Markierung, für Schleife durchlaufen und wie unten Titel oder eindeutige ID dieses Marker mit Position Ihrer Arraylist-Titel/eindeutigen ID vergleichen:

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
      @Override 
      public boolean onMarkerClick(Marker marker) { 
       for (int i = 0; i < arrayList.size(); i++) { 
        if (marker.getTitle().equals(finalMSearchResultModel.getRecords().get(i).getHotelName())) { 
        // YOUR ACTION GOES HERE 
        } 
       } 
       return false; 
      } 
     }); 
+0

Can Bitte beschreiben Sie die Lösung genauer? Wie deklarieren Sie später den Marker und andere Momente? – Morozov

+0

@Morozov: Ich verstehe Ihren Standpunkt nicht, können Sie bitte Ihren Standpunkt erläutern? – Bhavnik