0

I'm facing the problem about get detail information(data) from marker to NestedScrollView of BottomSheet. When I clicked marker, NestedScrollView will scroll up from bottom and display corresponding data. Im using json to get data.

My source code:

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

I don't know how to get data from maker to NestedScrollView

Example:

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

If you need more information, I will post more!

1 Answers1

1

1 - Create model class with your attributes like title, avatar, address etc...

2 - Create an Arraylist of your model type

3 - Add all those data in your arraylist

4 - Now in onMarkerClick method of your marker, iterate for loop and compare title or unique id of that marker with position of your arrayList title/unique id like below:

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;
            }
        });
Bhavnik
  • 2,020
  • 14
  • 21
  • Can you please describe the solution in more details? How do you later declare the marker and other moments? – Morozov Jul 16 '17 at 21:48
  • @Morozov: I am not getting your point, can you please elaborate your point ? – Bhavnik Jul 29 '17 at 05:57
  • I have tried the same way using the Hashmap (list size 3) but whenever I am clicking on a marker, I get All 3 bottomsheet dialog at a time. Otherwise I am not getting the bottomsheet! How can I Get rid of this? – A S M Sayem Sep 24 '20 at 15:47