mardi 3 novembre 2015

Display the nearest latitude and longitude in listview from the SQLite based from the user's location

I created an app composed of google map and listview of places. The data of places is in the SQLite together with the latitude and longitude. When the user open the app, the marker in the map will automatically go to the location of user. Under the map composed of locations in which when the user selects one of list, marker will change based from the latitude and longitude of the list. I decided to add a button wherein if the user clicks it, nearby location will appear based on the location of the user in listview and it will replace the previous listview and the markers will appear in the map. I dont have an idea how to display the nearby location once I click a button. Can you suggest simple and basic code to do it since im newbie and my codes based only from the tutorials in the internet. Please help me.

public class MainActivity extends AppCompatActivity implements LocationListener {

    GoogleMap map;

    List<LocationModel> GetLocation;
    Context context = this;
    DatabaseHelper dbhelper;
    DatabaseHelper db = new DatabaseHelper(this);
    ListView lv;
    View yourListView,yourProfileView;
    Button buttonnearby;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbhelper = new DatabaseHelper(MainActivity.this);


        buttonnearby = (Button) findViewById(R.id.button);
        buttonnearby.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View convertView) {


            }

        });

        try{
            dbhelper.createDataBase();
        }
        catch(IOException e){
            e.printStackTrace();
        }
        try {
            dbhelper.openDataBase();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        GetLocation = dbhelper.getLocation();
        lv = (ListView) findViewById(R.id.listView);
        lv.setAdapter(new ViewAdapter());

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                LatLng latlngtofocus = new LatLng(Double.parseDouble(GetLocation.get(i).getlatitude()),  Double.parseDouble(GetLocation.get(i).getlongitude()));

                map.animateCamera(CameraUpdateFactory.newLatLngZoom(latlngtofocus, 17.0f));

                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(latlngtofocus);
                //adding marker to the map
                map.addMarker(markerOptions);


                yourListView = findViewById(R.id.layout);
                ViewGroup parent = (ViewGroup) yourListView.getParent();
                parent.removeView(yourListView);
// inflate your profile view (or get the reference to it if it's already inflated)
                yourProfileView = getLayoutInflater().inflate(R.layout.profile_location, parent, false);
// add it to the parent
                parent.addView(yourProfileView);

            }


        });



        //To get MapFragment reference from xml layout
        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);

        //To get map object
        map = mapFragment.getMap();
        map.getUiSettings().setZoomControlsEnabled(true);

       /* //to show current location in the map
        map.setMyLocationEnabled(true);

        map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {

                Toast.makeText(getApplicationContext(), latLng.toString(), Toast.LENGTH_LONG).show();
            }
        });*/

        //To setup location manager
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        //To request location updates
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

    }


    @Override
    public void onLocationChanged(Location location) {

        //To clear map data
        map.clear();

        //To hold location
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

        //To create marker in map
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng);
        markerOptions.title("My Location");
        //adding marker to the map
        map.addMarker(markerOptions);

        //opening position with some zoom level in the map
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17.0f));
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    /****************************************************************************************
     *                                      CUSTOM LIST
     ****************************************************************************************/
    public class ViewAdapter extends BaseAdapter {

        LayoutInflater mInflater;

        public ViewAdapter() {
            mInflater = LayoutInflater.from(context);
        }

        @Override
        public int getCount() {
            return GetLocation.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_location,null);
            }

            final TextView place = (TextView) convertView.findViewById(R.id.location);
            final TextView latitude = (TextView) convertView.findViewById(R.id.latitude);
            final TextView longitude = (TextView) convertView.findViewById(R.id.longitude);

            location.setText(GetLocation.get(position).getlocation());
            latitude.setText(GetLocation.get(position).getlatitude());
            longitude.setText(GetLocation.get(position).getlongitude());

            return convertView;
        }
    }

    @Override
    public void onBackPressed() {
        if(yourProfileView != null && yourProfileView.getParent() != null) {
            // remove your profile view
            ViewGroup parent = (ViewGroup) yourProfileView.getParent();
            parent.removeView(yourProfileView);

            // a reference to yourListView has to be saved somewhere; just get it

            // add your listview to the parent
            parent.addView(yourListView);
        } else {
            super.onBackPressed();
        }
    }

}

Aucun commentaire:

Enregistrer un commentaire