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*/)
Другие вопросы по тегам