2015-10-30 2 views
2

Я создаю приложение, состоящее из стран в списке и с картой google над списком. Когда пользователь откроет приложение. theres - карта google, которая определяет местоположение пользователя, а под ним - список стран. Как только пользователь выберет в списке, карта автоматически отправится в страну. listview хранится в sqlite вместе с широтой и долготой. У меня нет идеи с тех пор, как я впервые создал приложение с картой google.Android google map listview with onClickListener()

Главная Activity.java

public class MainActivity extends AppCompatActivity implements LocationListener { 

    GoogleMap map; 

    List<CountryModel> GetCountry; 
    Context context = this; 
    DatabaseHelper dbhelper; 
    DatabaseHelper db = new DatabaseHelper(this); 
    ListView lv; 

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

     dbhelper = new DatabaseHelper(MainActivity.this); 

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

     GetCountry = dbhelper.getCountry(); 
     lv = (ListView) findViewById(R.id.listView); 
     lv.setAdapter(new ViewAdapter()); 



     //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 GetCountry.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_country,null); 
      } 

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

      country.setText(GetCountry.get(position).getcountry()); 
      latitude.setText(GetCountry.get(position).getlatitude()); 
      longitude.setText(GetCountry.get(position).getlongitude()); 

      return convertView; 
     } 
    } 

} 

ответ

2

В вашем onLocationChange(), карта движется к вашему текущему местоположению

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

Я думаю, что вы должны сделать то же самое с ListView решеточных длинный.

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

     LatLng latLngtofocus = new LatLng(Double.parseDouble(GetCountry.get(i).getlatitude()), Double.parseDouble(GetCountry.get(i).getlatitude())); 

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

Может быть, это должно сработать.

+0

Я попробую это, но у меня нет идеи, как назвать широту и долготу из списка. Я только показываю его вместе с названием страны. –

+0

@GemUbaldo Я обновил свой ответ, посмотрю, работает ли он, иначе мы можем сделать еще одну вещь .. проверьте это. На самом деле, ваш код немного отличается, поскольку я кодирую :) .. – Prakhar

+0

У меня ошибка в этой строке - > (GetCountry.get (i) .getlatitude(), GetCountry.get (i) .getlongitude()); он говорит, что LatLng (double, double) в LatLng нельзя применить к (java.lang.String, java.lang.String) –