实例化接口对象时出现ClassCastException

时间:2016-12-04 16:04:23

标签: android

我有一个扩展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错误有一些变化。为了纠正这个问题,我需要做什么?感谢。

1 个答案:

答案 0 :(得分:1)

mCallback = (SelectionClickedListener) this;

thisSelectionViewSelectionView未实现自己的SelectionClickedListener接口。

  

我尝试了一些其他的Context对象而不是这个

this不是ContextthisSelectionView

  

该类有一个接口,该接口由实例化它的片段实现,以监听点击事件。

片段不是Context。没有Context对象将成为您的片段。

  

为了纠正这个问题,我需要做些什么?

步骤1:将setOnSelectionClickedListener()方法添加到SelectionView,将SelectionClickedListener对象作为参数。使用此选项填充mCallback字段。

步骤2:让您的片段调用setOnSelectionClickedListener(),并提供其SelectionClickedListener。如果片段本身正在实现SelectionClickedListener,那么片段中的方法中的this就是SelectionClickedListener,因此您可以调用setOnSelectionClickedListener(this)