I have a DataAdapter class whose getView() returns a Custom View Class. The View itself is a LinearLayout that contains a few controls, one of which being a CheckBox. It also has a few properties - an ID from the database and it's index in the DataAdapter.
When the CheckBox OnCheckedChange event fires, I want an event to fire in the DataAdapter to so I know to change the underlying data. I can set up a custom Event in the view using an interface:
private OnChangedListener mListener;
public interface OnChangedListener{
public void onChanged();
}
public void setOnChangedListener(OnChangedListener eventListener) {
mListener=eventListener;
}
and call that from the CheckedChange of the CheckBox:
private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
mListener.onChanged();
}
};
but what I can't do is work out a way to pass back the view as an argument. If I change the interface to return the View:
public interface OnChangedListener{
public void onChanged(MyCustomView arg0);
}
I can't return the view from inside the OnCheckedChangeListener():
private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
mListener.onChanged(this);
}
};
I get an error:
"The method onChanged(MyCustomView) in the type MyCustomView.OnChangedListener is not applicable for the arguments (new CompoundButton.OnCheckedChangeListener(){})"
I thought about using a Handler.Post, but then I'd be inside a Runnable so I still can't expose the View.
I'm sure there must be something simple I'm missing...