2016-12-04 8 views
-2

私はLinearLayoutを拡張するクラスを持っています。そのクラスには、クリックイベントをリスンするためにインスタンスを生成するフラグメントによって実装されるインタフェースがあります。私の問題は、LinearLayoutクラスでは、コールバックオブジェクトをインスタンス化する方法がわかりません。ClassCastExceptionインターフェイスオブジェクトをインスタンス化するとき

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にキャストすることはできません。私が代わりにthisのいくつかの他のContextオブジェクトを試みたが、私はいつもにいくつかのバリエーションを持っている

myapp.SelectionView $ OnSelectionClickedListener 0エラー。これを訂正するために私は何をする必要がありますか?ありがとう。

答えて

1
mCallback = (SelectionClickedListener) this; 

thisSelectionViewです。 SelectionViewは独自のSelectionClickedListenerインターフェイスを実装していません。

私はいくつかの他のコンテキストオブジェクトの代わりに、この

thisContextない試みました。 thisSelectionViewです。

このクラスには、クリックイベントをリスンするためにインスタンスを生成するフラグメントによって実装されるインターフェイスがあります。

フラグメントはContextではありません。あなたの断片になるContextオブジェクトはありません。

これを修正するには、何をする必要がありますか?

ステップ#1:パラメータとしてSelectionClickedListenerオブジェクトを取って、SelectionViewsetOnSelectionClickedListener()メソッドを追加します。これを使用してmCallbackフィールドに値を設定します。

ステップ2:フラグメント番号setOnSelectionClickedListener()SelectionClickedListenerに入力してください。フラグメント自体がSelectionClickedListenerを実装している場合は、のメソッドのthisSelectionClickedListenerであるため、setOnSelectionClickedListener(this)と呼ぶことができます。

+0

ありがとうございます。非常に役に立ちます。私はこれを実装しようとしているつもりです。あなたが気にしないなら、私のOPの編集を見ることができますか?再度、感謝します! (素晴らしい本、btw)。 – Alex

+0

@Alex:エラーメッセージがコードと一致しません。これは 'OnSportSelectionClickedListener'(表示しない)と' OnClickListener'(おそらく 'View.OnClickListener'ですが、ここでは使用していないようです)を参照しています。このクラッシュは編集中のコードからのものですか?また、親切な言葉をありがとう! – CommonsWare

+0

申し訳ありませんが、それは 'OnSelectionClickedListener'と言っているはずです。はい、それは私が投稿したコードからです(しかし、少し残っていますが、ここで重要なことは何もありません)。私はそれについてもう少し考える必要があると思う。再度、感謝します。 – Alex

関連する問題