0

我有一个 DataAdapter 类,它的 getView() 返回一个自定义视图类。View 本身是一个包含一些控件的 LinearLayout,其中一个是 CheckBox。它还有一些属性——来自数据库的 ID 和它在 DataAdapter 中的索引。

当 CheckBox OnCheckedChange 事件触发时,我希望在 DataAdapter 中触发一个事件,以便我知道更改基础数据。我可以使用界面在视图中设置自定义事件:

private OnChangedListener mListener;

public interface OnChangedListener{
    public void onChanged();
}

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

并从 CheckBox 的 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);
    }
}; 

我收到一个错误:“MyCustomView.OnChangedListener 类型中的方法 onChanged(MyCustomView) 不适用于参数(新 CompoundButton.OnCheckedChangeListener(){})”

我考虑过使用 Handler.Post,但是我会在 Runnable 中,所以我仍然无法公开视图。

我敢肯定一定有一些简单的东西我错过了......

4

2 回答 2

0

thisinmListener.onChanged(this);不是指您的视图,而是指OnCheckedChangeListener(包装类)。您需要像这样返回视图:

mListener.onChanged(/*reference to your view*/)
于 2013-12-12T13:16:52.277 回答
0

答案很简单。CheckButtons 父级应该是我正在寻找的视图的实例:

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

        if (parent instanceof CustomView){
            Custom myView = (CustomView) parent;
            mListener.onChanged(myView);
        }
    }
于 2013-12-13T09:19:46.850 回答