Android View с CustomEvent, передавая View как аргумент
У меня есть класс DataAdapter, у которого getView() возвращает пользовательский класс представления. Само представление представляет собой LinearLayout, который содержит несколько элементов управления, одним из которых является CheckBox. Он также имеет несколько свойств - идентификатор из базы данных и его индекс в DataAdapter.
Когда срабатывает событие CheckBox OnCheckedChange, я хочу, чтобы событие запускалось в DataAdapter, чтобы я знал об изменении базовых данных. Я могу настроить пользовательское событие в представлении, используя интерфейс:
private OnChangedListener mListener;
public interface OnChangedListener{
public void onChanged();
}
public void setOnChangedListener(OnChangedListener eventListener) {
mListener=eventListener;
}
и вызвать это из CheckedChange CheckBox:
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, поэтому я все еще не могу открыть представление.
Я уверен, что должно быть что-то простое, что мне не хватает...
2 ответа
Ответ был прост. Родитель CheckButtons должен быть экземпляром представления, которое я ищу:
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
ViewParent parent = arg0.getParent();
if (parent instanceof CustomView){
Custom myView = (CustomView) parent;
mListener.onChanged(myView);
}
}
this
в mListener.onChanged(this);
не относится к вашему мнению, это относится к OnCheckedChangeListener
(класс обёртывания). Вам необходимо вернуть View следующим образом:
mListener.onChanged(/*reference to your view*/)