【问题标题】:Change Position Camera View on MapView Android Studio by Clicking list item on List View通过单击列表视图上的列表项更改 MapView Android Studio 上的位置相机视图
【发布时间】:2019-01-15 05:30:53
【问题描述】:

所以我在 Android Studio 中有 listview,我如何将意图放在 listview 上的每个列表项上以打开地图视图,同时使用我自己定义的纬度和经度值更改地图视图上的相机位置?所以列表视图中的每个项目都有自己的纬度和经度值,当我们单击它时,它将为地图视图上的每个项目列表显示不同的相机位置

listview

mapview

enter image description here

这是我的适配器类

public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Jarak> jarakItems;
private ImageLoader imageLoader;

public CustomListAdapter(Activity activity, List<Jarak> jarakItems) {
    this.activity = activity;
    this.jarakItems = jarakItems;
}

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

@Override
public Object getItem(int location) {
    return jarakItems.get(location);
}

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



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

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

   if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();
    NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.gambar);
    TextView nama = (TextView) convertView.findViewById(R.id.nama);
    TextView jarak = (TextView) convertView.findViewById(R.id.jarak);

    Jarak j = jarakItems.get(position);

    //thumbNail.setImageUrl(j.getGambar(), imageLoader);
    nama.setText(j.getNama());
    jarak.setText(j.getJarak()+" Km");

    return convertView;
    }
}

【问题讨论】:

  • 很简单的任务,在listitem点击时将一个包中的latLang传递给MapActivity,然后将相机动画到新的latLang
  • 对不起,我在哪里放了代码来为新的 latLang 设置相机动画?您能否更详细地解释您的答案?
  • 你如何从列表项中获取 latLang?你能显示代码
  • 当然,你可以在下面看到,这是我从列表项中获取 latLang 的代码
  • 您能否也发布您的适配器类,这次编辑您的问题并将其发布到那里。

标签: android listview android-intent latitude-longitude android-mapview


【解决方案1】:
 private void callListVolley(double latitude_Reseller, double longitude_Reseller) {
    itemList.clear();
    adapter.notifyDataSetChanged();

    swipe.setRefreshing(true);

    JsonArrayRequest jArr = new JsonArrayRequest(url + latitude_Reseller + "&lng=" + longitude_Reseller,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.e(TAG, response.toString());

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Jarak j = new Jarak();
                            j.setNama(obj.getString("nama_Reseller"));

                            double jarak = Double.parseDouble(obj.getString("jarak"));

                            j.setJarak("" + round(jarak, 2));

                            itemList.add(j);

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

                    }

                    // memberitahu adapter jika ada perubahan data
                    adapter.notifyDataSetChanged();

                    swipe.setRefreshing(false);
                }
            }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.e(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
            swipe.setRefreshing(false);
        }
    });

    // menambah permintaan ke queue
    AppController.getInstance().addToRequestQueue(jArr);
}

【讨论】:

    【解决方案2】:

    您可以通过此代码在您的 Activity OnCreate 覆盖方法中获取点击项值

        ListView listView = getListView();
    listView.setOnItemClickListener(new OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
    
            Log.i("Hello!", "Y u no see me?");
    
        }
    
    });
    

    然后从点击项中获取 lat long 值,然后将相机移动到 OnMapReady 方法中的特定 lat long 位置,就在这段代码中

         ListView listView = getListView();
        listView.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
    
               flote lat = latlong; //get this from your arraylist by putting the value position
    flote long = latlong; //get this from your arraylist by putting the value position
    Latlong newpos = new Latlong(lat,long);
    //for create a marker on that point
        MarkerOptions options = new MarkerOptions();
    options.position(newpos);
     mMap.addMarker(options);
    
    //mMap is the object of google map
    mMap.moveCamera(CameraUpdateFactory
                                                        .newCameraPosition
                                                                (new CameraPosition.Builder()
                                                                        .target(newPos)
                                                                        .zoom(55.5f)
                                                                        .build()));
    

    【讨论】:

      【解决方案3】:

      首先从列表项中获取latlang,并将其作为附加项传递给意图,

      主活动

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
      
                  double lat = view.getLat();
                  double lang = view.getLang();
                  Bundle bundle = new Bundle();
      
                  bundle.putDouble("LAT", lat);
                  bundle.putDouble("LANG", lang);
      
                  Intent intent = new Intent(MainActivity.this, MapsActivity.class);
                  intent.putExtras(bundle);
                  startActivity(intent);
              }
          });
      

      然后在地图活动中获取该意图并将相机动画到新点。

      地图活动

      //...
       protected void onCreate(Bundle savedInstanceState) {
         ///....
      
          Intent intent = getIntent();
          Bundle bundle = intent.getExtras();
          double lat =  bundle.getDouble("LAT");
          double lang =  bundle.getDouble("LANG");
      
          latLng = new LatLng(lat, lang);
      
      }
      
       @Override
      public void onMapReady(GoogleMap googleMap) {
      
      
          mMap = googleMap;
      
          CameraUpdate location = CameraUpdateFactory.newLatLngZoom(
                  latLng, 15);
          mMap.animateCamera(location);
      
      }
      

      【讨论】:

      • 但是我已经有了针对我当前位置的onmapready方法……这是否意味着我不需要再次编写它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多