Hi guys!

I created an array of items, each item represents a type of establishment 
that will be displayed on the map.
What I need is to filter the items according to the button clicked, and 
this is where the problem comes from, 
since I have to call the onMapReady () method again, and I do not know if 
this is a good practice.

For more information, look at Android Maps API:

https://developers.google.com/maps/documentation/android-api/


/**
 * Runs when a GoogleApiClient object successfully connects
 *
 * @param bundle
 */
@Override
public void onConnected(@Nullable Bundle bundle) {
    //@TODO --> MOCK my currently location
    mLastLocation.setLatitude(-25.4370264);
    mLastLocation.setLongitude(-49.2677954);

    if (mLastLocation != null) {
        // Determine whether a Geocoder is available.
        if (!Geocoder.isPresent()) {
            showToast(getString(R.string.no_geocoder_available));
            return;
        }

        mLocationRequested = true;

        if (mLocationRequested) {
            //@TODO - Add a marker array[], and move the camera for close to me.
            mMarkers = mockMarkersArray();
            mButtonFilter = null;

            showCoordinatesInMap();
        }
    }
}



/**
 *
 */
private void showCoordinatesInMap() {
    mMapFragment.getMapAsync(this);
}



/**
 * Draw Google Maps.
 *
 * @param googleMap
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    if (ActivityCompat.checkSelfPermission(getApplicationContext(), 
android.Manifest.permission.ACCESS_FINE_LOCATION) != 
PackageManager.PERMISSION_GRANTED && 
ActivityCompat.checkSelfPermission(getApplicationContext(), 
android.Manifest.permission.ACCESS_COARSE_LOCATION) != 
PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] 
permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the 
documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    googleMap.setMyLocationEnabled(true);
    googleMap.setOnMarkerClickListener(this);
    googleMap.setOnInfoWindowClickListener(this);
    googleMap.setOnInfoWindowCloseListener(this);

    if (mMarkers.length() > 0) {
        mAccomodButton.setOnClickListener(this);

        loopMarkers(googleMap);
    }

    //@TODO - Zooming in on the map by focusing on my currently position.
    LatLng currentlyPosition = new LatLng(mLastLocation.getLatitude(), 
mLastLocation.getLongitude());
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentlyPosition, 
18));
}



/**
     * Loop of activities with markers.
     *
     * @param googleMap
     */
    private void loopMarkers(GoogleMap googleMap) {
        mGoogleMap = googleMap;

        for (int i = 0; i < mMarkers.length(); i++) {
            try {
                JSONObject marker = mMarkers.getJSONObject(i);
                String[] latLng = marker.getString("latLng").split(",");
                double lat = Double.parseDouble(latLng[0]);
                double lng = Double.parseDouble(latLng[1]);

                LatLng position = new LatLng(lat, lng);

                float distanceInMeters = calcDistanceToMarker(i, position);

                drawMarker(googleMap, marker, position);

//                showToast("Distance with " + marker.getString("title") + " 
is: " + distanceInMeters + "m");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }



/**
 * Drawing each marker on the map.
 *
 * @param googleMap
 * @param marker
 * @param position
 * @throws JSONException
 */
private void drawMarker(GoogleMap googleMap, JSONObject marker, LatLng 
position) throws JSONException {
    googleMap.addMarker(new MarkerOptions()
            .title(marker.getString("title"))
            .snippet(marker.getString("desc"))
            .position(position)
    );
}



/**
 * @param filter
 * @return
 */
@Nullable
private JSONArray filterMarkersByType(String filter) {
    if (mMarkers.length() > 0) {
        for (int i = 0; i < mMarkers.length(); i++) {
            try {
                JSONObject marker = mMarkers.getJSONObject(i);

                if (filter != null) {
                    if (! marker.getString("type").equals(filter)) {

                        Log.d("DEBUG", "============");
                        Log.d("DEBUG", "Marker title: " + 
marker.getString("title"));
                        Log.d("DEBUG", "Marker desc: " + 
marker.getString("desc"));
                        Log.d("DEBUG", "Marker type: " + 
marker.getString("type"));
                        Log.d("DEBUG", "============");

                        mMarkers.remove(i);
                    }
                }

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

        return mMarkers;
    }

    return null;
}



/**
     * Button click event.
     *
     * @param v
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.accomod_button:

                filterMarkersByType("accomod");

                mGoogleMap.clear();
                onMapReady(mGoogleMap);
//                loopMarkers(mGoogleMap);

                break;
        }
    }



-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to android-developers+unsubscr...@googlegroups.com.
To post to this group, send email to android-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/671438f7-9347-4f98-bef4-f8037b10ee20%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to