2013-12-12 9 views
0

У меня есть класс DataAdapter, чей getView() возвращает класс пользовательского вида. Сам вид представляет собой LinearLayout, который содержит несколько элементов управления, одним из которых является CheckBox. Он также имеет несколько свойств - идентификатор из базы данных и его индекс в DataAdapter.Android View with CustomEvent, проходящий Просмотр как аргумент

Когда происходит событие CheckBox OnCheckedChange, я хочу, чтобы в DataAdapter произошло событие, чтобы я мог изменить базовые данные. Я могу создать пользовательское событие в представлении с помощью интерфейса:

private OnChangedListener mListener; 

public interface OnChangedListener{ 
    public void onChanged(); 
} 

public void setOnChangedListener(OnChangedListener eventListener) { 
    mListener=eventListener; 
} 

и называют, что из CheckedChange чекбокса:

private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){ 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     mListener.onChanged(); 
    } 
}; 

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

public interface OnChangedListener{ 
    public void onChanged(MyCustomView arg0); 
} 

Я не могу вернуться вид изнутри OnCheckedChangeListener():

private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){ 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     mListener.onChanged(this); 
    } 
}; 

Я получаю сообщение об ошибке: «Метод OnChanged (MyCustomView) в типе MyCustomView.OnChangedListener не применим для аргументов (новый CompoundButton.OnCheckedChangeListener() {}) "

Я думал об использовании Handler.Post, но тогда я был бы внутри Runnable, поэтому я все еще могу 't выставить представление.

Я уверен, что там должно быть что-то простое, что я пропускаю ...

ответ

0

Ответ был прост. Родитель CheckButtons должен быть экземпляром вида, который я ищу:

public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     ViewParent parent = arg0.getParent(); 

     if (parent instanceof CustomView){ 
      Custom myView = (CustomView) parent; 
      mListener.onChanged(myView); 
     } 
    } 
0

this в mListener.onChanged(this); не относится к вашему мнению, это относится к OnCheckedChangeListener (класс обертывание). Вам необходимо вернуть Вид:

mListener.onChanged(/*reference to your view*/) 
+0

Это то, что я получаю. Мой вопрос в том, как я могу ссылаться на представление внутри OnCheckedChangeListener? –

+0

вид, который вы возвращаете в конце getView() –