我有一个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。
我确信必须有一些我想念的简单......
答案 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);
}
}