我有一个扩展LinearLayout的类。该类具有一个接口,该接口由片段实现,该片段实例化它以侦听单击事件。我的问题是在LinearLayout类中,我无法弄清楚如何实例化回调对象。
public class SelectionView extends LinearLayout {
OnSelectionClickedListener mCallback;
LinearLayout mSelection;
public interface OnSelectionClickedListener {
void onSelected(SelectionView view);
}
public SelectionView (Context context) {
super(context);
}
public void init () {
LayoutInflater inflater = LayoutInflater.from(getContext());
final LinearLayout viewGroup = (LinearLayout) inflater.inflate(R.layout.selection, this);
mSelection = (LinearLayout) viewGroup.findViewById(R.id.selection_container);
mCallback = (SelectionClickedListener) this;
// ...
}
我得到的错误就在最后一行:
引起:java.lang.ClassCastException: com.mysite.myapp.SelectionView无法强制转换为 com.mysite.myapp.SelectionView $ OnSelectionClickedListener
我尝试过其他一些Context
个对象而不是this
,但我总是对ClassCastException
错误有一些变化。为了纠正这个问题,我需要做什么?感谢。
答案 0 :(得分:1)
mCallback = (SelectionClickedListener) this;
this
是SelectionView
。 SelectionView
未实现自己的SelectionClickedListener
接口。
我尝试了一些其他的Context对象而不是这个
this
不是Context
。 this
是SelectionView
。
该类有一个接口,该接口由实例化它的片段实现,以监听点击事件。
片段不是Context
。没有Context
对象将成为您的片段。
为了纠正这个问题,我需要做些什么?
步骤1:将setOnSelectionClickedListener()
方法添加到SelectionView
,将SelectionClickedListener
对象作为参数。使用此选项填充mCallback
字段。
步骤2:让您的片段调用setOnSelectionClickedListener()
,并提供其SelectionClickedListener
。如果片段本身正在实现SelectionClickedListener
,那么片段中的方法中的,this
就是SelectionClickedListener
,因此您可以调用setOnSelectionClickedListener(this)