使用CustomEvent的Android视图,将视图作为参数传递

时间:2013-12-12 12:57:27

标签: android view arguments dataadapter custom-event

我有一个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)方法不适用于参数(new CompoundButton.OnCheckedChangeListener(){})”

我想过使用Handler.Post,但后来我会在Runnable里面,所以我仍然无法公开View。

我确信必须有一些我想念的简单......

2 个答案:

答案 0 :(得分:0)

this中的{p> mListener.onChanged(this);未引用您的视图,它指的是OnCheckedChangeListener(包装类)。您需要像这样返回视图:

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

答案 1 :(得分:0)

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

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

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