при нажатии элемента ListView переместите камеру Google Map на указанный маркер. - PullRequest
0 голосов
/ 13 мая 2018

У меня есть действие в Картах Google, которое включает в себя окно поиска и просмотр списка доставок (который содержит LatLng).Когда я нажимаю на адрес внутри представления списка, я хочу, чтобы камера переместилась на этот адрес / маркер (все адреса внутри ListView помечены).

У меня есть этот метод внутри моего пользовательского адаптера ListAdapter, где япытался получить обновление камеры, но это не работает.Вот часть моего кода.

public class DeliveriesListAdapter extends ArrayAdapter<Delivery> implements View.OnClickListener {
private ArrayList<Delivery> deliveries;


public DeliveriesListAdapter(ArrayList<Delivery> data, Context context) {
    super(context, R.layout.activity_row_item, data);
    this.deliveries = data;
    this.mContext = context;
}
    @Override
    public void onClick(View v) {
        // TODO: on click, move camera to selected address on map.
        int position = (Integer) v.getTag();
        Delivery delivery = (Delivery) deliveries.get(position);
        CameraUpdateFactory.newLatLng(delivery.getLatLng());
    }
}

Список в нижней части экрана должен перемещать камеру к этому маркеру на карте.

Вот класс My Data, в котором хранится LatLng указанного элемента списка.

public class Delivery {

private String address;
private double distance, time;
private LatLng latLng;
private Place place;

public Delivery(Place place) {
    address = place.getAddress().toString();
    distance = -1; 
    time = -1;
    latLng = place.getLatLng();
    this.place = place;
}

Внутри моей активности в Картах Google:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{

private ArrayList<Delivery> deliveryList = new ArrayList<>();

// called inside onCreate(...)
  private void setUpListView() {
    deliveriesListView = findViewById(R.id.deliveries_listview);
    adapter = new DeliveriesListAdapter(addressList, this);
    deliveriesListView.setAdapter(adapter);
}

/**
 * Used to add Delivery to a list view.
 * @param delivery The Delivery containing the address to be added to the view to add the marker.
 */
private void addDeliveryToList(Delivery delivery) {
    deliveryList.add(delivery);
    adapter.notifyDataSetChanged();
}

редактировать: я знаю, что CameraUpdateFactory.newLatLng(delivery.getLatLng()); был неправ, я раньше связывался с ним и удалил то, что у меня было изначально.

РЕШЕНИЕ : мне удалось решить эту проблему, переписав свой настраиваемый адаптер списка в RecyclerViewAdapter, и мне удалось переместить метод Overriden onClick в мою активность в Картах, из-за чего у меня возникли проблемы.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вам также нужно указать карту для перемещения камеры. Как это mMap.moveCamera(CameraUpdateFactory.newLatLng(delivery.getLatLng())). И еще одна вещь, вы должны никогда не обрабатывать щелчки в адаптере. Они должны содержаться в части пользовательского интерфейса хоста. Вы можете использовать интерфейс для обратного вызова в части пользовательского интерфейса хоста. Вы можете получить подсказку о том, как это сделать здесь .

0 голосов
/ 13 мая 2018

В вашей функции onCLick замените CameraUpdateFactory.newLatLng(delivery.getLatLng()); на animateCamera(CameraUpdateFactory.newLatLng(delivery.getLatLng())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...