android: двойной выход onclicklistener

57
4

Я пишу приложение, где у меня есть карта с маркером, который пользователь падает, и я подумал об этом методе, чтобы удалить маркеры, которые пользователь не хочет: сначала вы нажимаете на значок, а затем щелкните маркер и маркер получает удален. Проблема, с которой я столкнулась, заключается в том, что после первого щелчка на значке все маркеры удаляются при нажатии. Мне нужен способ выйти из OnClickListener. Я попробовал return; но это не сработало.

      mDelete = view.findViewById(R.id.Im_delete);
mDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: clicked Delete icon");
deleteMarker();
return;
}
});
private void deleteMarker(){
Toast.makeText(getActivity(), "Click a marker to delete it", Toast.LENGTH_SHORT).show();
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.remove();
return false;
}
});

}

спросил(а) 2018-04-23T00:29:00+03:00 2 года, 6 месяцев назад
1
Решение
70

Ваше текстовое описание не так ясно, но пусть некоторые изменения я думаю, что вы можете сделать:

На общедоступном логическом марке onMarkerClick (маркер) вы должны вернуть true, чтобы избежать поведения по умолчанию после удаления маркера.

Я думаю, вы должны добавить setOnMarkerClickListener вне метода deleteMarker и, чтобы пользователь не удалял маркер при нажатии на него, вы можете использовать логический флаг (mDeleteMode).

Используя флаг mDeleteMode, вы установите его true, когда пользователь нажимает на mDelete и устанавливает его на false, когда, например, a) пользователь удаляет маркер, b) нажимает на него или c) снова нажимает на mDelete.


public class yourClass {

    private boolean mDeleteMode = false;

protected void yourMethod(View view...) {
mDelete = view.findViewById(R.id.Im_delete);
mDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: clicked Delete icon");
Toast.makeText(getActivity(),
"Click a marker to delete it",
Toast.LENGTH_SHORT).show();
mDeleteMode = true;
}
});

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (mDeleteMode) {
mDeleteMode = false;
marker.remove();
return true;
}
return false;
}
});
}
}

ответил(а) 2018-04-23T01:30:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема