Создать собственный OnItemClickListener

Я думаю, что вопрос говорит сам за себя: я хочу создать собственный OnItemClickListener для ListView. Я хочу добавить и изменить параметры для OnItemClickListener, но как я могу создать собственный, чтобы он вызывался, если я нажимаю элемент в ListView?


person Cilenco    schedule 03.08.2013    source источник
comment
stackoverflow.com/questions/15222129/ я думаю, что это помогает ты   -  person Kostya Khuta    schedule 03.08.2013


Ответы (1)


Сначала вы создаете интерфейс, затем реализуете метод, в котором вы устанавливаете прослушиватель в своем пользовательском классе, а затем уже создаете основной класс для прослушивания вашего пользовательского события.

Интерфейс:

public interface OnCustomEventListener{
  public void onEvent();   //can have parameters
}

метод в вашем, например. адаптер: частный OnCustomEventListener mListener; //поле

//setter method
public void setCustomEventListener(OnCustomEventListener eventListener) {
   this.mListener=eventListener;
}

слушатель:

someObjectYouWantToHaveYourCustomListenerToBeAssignedFor.setCustomEventListener(new OnCustomEventListener(){
    public void onEvent(){
    //do whatever you want to do when the event is performed.
    }
});  

как позвонить напр. от вашего адаптера:

if(this.mListener!=null){
   this.mListener.onEvent();
}

P.S. Ваш пользовательский слушатель может иметь столько параметров, сколько вы хотите

Источник

person Boris Mocialov    schedule 03.08.2013
comment
Спасибо за это, но есть одна вещь, которую я не понимаю. Почему OnCustomEventListener знает, что он должен вызвать, если я нажму на элемент? - person Cilenco; 03.08.2013
comment
потому что OnCustomEventListener действует как обратный вызов - person Boris Mocialov; 03.08.2013
comment
Я реализую эти три шага в своих классах, но не могу получить ClickEvents - person Cilenco; 03.08.2013
comment
@Cilenco, когда ты звонишь: this.mListener.onEvent(); ? - person Boris Mocialov; 03.08.2013
comment
Я сделал класс, который extands ListView. Туда я помещаю интерфейс OnCustomEventListener и метод setCustomEventListener(OnCustomEventListener eventListener). В своей деятельности я вызываю myListView.setCustomEventListener(new ...) с событием внутри. - person Cilenco; 03.08.2013
comment
@Cilenco, можете ли вы использовать Log.i(...) в своем пользовательском классе, который extends ListView в той части, где должно быть запущено событие, чтобы увидеть, действительно ли оно запускается - person Boris Mocialov; 03.08.2013
comment
Я немного поработал. Событие запускается при запуске Activity, но не при нажатии на элемент... - person Cilenco; 03.08.2013
comment
@Cilenco не забывайте, что вы должны вызывать `this.mListener.onEvent();` каждый раз, когда вы хотите, чтобы ваш основной класс знал, что действие инициировано - person Boris Mocialov; 03.08.2013
comment
Я думаю, что моя проблема в том, что я должен запустить событие из метода onTouchEvent, верно? Как я могу проверить клик в этом методе? Или я что-то неправильно понял? - person Cilenco; 03.08.2013
comment
@Cilenco хорошо, да, я так думаю, я не знаю, как выглядит ваш код, поэтому я не уверен, но да, вы должны запускать событие, когда происходит какое-то событие. Запуск события: this.mListener.onEvent(); - person Boris Mocialov; 03.08.2013