2016-12-05 6 views
0

マーカーからBottomSheetのNestedScrollViewまでの詳細情報(データ)を取得する際の問題に直面しています。 markerをクリックすると、NestedScrollViewが下から上にスクロールして対応するデータを表示します。私はjsonを使ってデータを取得しています。Google MapでマーカーがクリックされたときにマーカーからBottomSheetにデータを取得する方法

私のソースコード:BottomSheetの

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; 
      } 
     }); 
    } 
} 
... 

}

レイアウト:

<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> 

私は例

NestedScrollView

にメーカーからデータを取得する方法がわかりません。

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

さらに詳しい情報が必要な場合は、さらに投稿します。

答えて

1

1 -

3モデルタイプのArrayListの作成 - -

2 ...タイトル、アバター、住所などのようなあなたの属性を持つモデルクラスを作成し、あなたのArrayList内のすべてのそれらのデータを追加

4 - 今すぐあなたのマーカーのonMarkerClick方法では、forループを反復処理し、以下のようなあなたのArrayListタイトル/一意のIDの位置とそのマーカーのタイトルまたは一意のIDを比較します

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

缶あなたは解決策をより詳しく記述してください。後でマーカーやその他の瞬間をどのように宣言しますか? – Morozov

+0

@モロゾフ:私はあなたの意見を得ていない、あなたはあなたのポイントを詳しく教えていただけますか? – Bhavnik

関連する問題