2017-03-08 55 views
-1

このONATTACH方法は私のアンドロイドアプリケーションをクラッシュ、私はそれを削除し、私の私は、この方法の妥当性を知りたいと、私は完全に断片ONATTACH()メソッドの私のコードをクラッシュ

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

の方法を削除すると、何が起こりますかコードがスムーズに実行され、将来問題が発生しないことを望みます。ここで

+0

エラーを与えるコード行を指定し、エラーも共有する必要があります。 –

+2

'context'が' OnFragmentInteractionListener'のインスタンスでない場合、あなたは例外をスローしています。それはクラッシュの理由かもしれません。 –

答えて

0

は、このコードは、通信が両者の間に必要とされる場合には、活動の断片を操作するためのdocumentation's wayある問題context instanceof OnFragmentInteractionListener

Fragment comunication Android docs.

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mListener = (OnFragmentInteractionListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnHeadlineSelectedListener"); 
     } 
    } 
0

です。私はそれが唯一の方法ではないので(ドキュメンタリーの方法だと言います(公開/購読エンジンのような他のテクニック、例えばEventBusを使うことができます)

このコードは、フラグメントがアタッチされたアクティビティが、フラグメントが期待するインターフェイスを実装していない場合、意図的にRunTimeExceptionをスローします。それが実装されている場合、そのアクティビティはそのインターフェイスタイプのポインタとして保存されます(あなたのケースでは - OnFragmentInteractionListener)。

あなたはラインが例外を投げる見ることができます:

throw new RuntimeException(context.toString() 
      + " must implement OnFragmentInteractionListener"); 

コンソールに持っているそうだとすれば、「OnFragmentInteractionListenerを実装しなければなりません」 - あなたは断片がOnFragmentInteractionListener実装する必要のある活動に取り付けた知っているのではなく。