2017-03-08 45 views
-1

這onAttach方法崩潰我的Android應用程序,我想知道這個方法的相關性,如果我刪除方法會發生什麼完全片段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

這裏是問題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

此代碼爲documentation's way用於與活性的片段的工作,當需要在兩者之間的通信。我提到它是文檔的方式,因爲它不是唯一的方法(您可以使用其他技術,例如發佈/訂閱引擎,例如EventBus)。

如果片段附加到的活動未實現片段期望附加到的接口,則該代碼故意拋出RunTimeException。如果它實現了它 - 活動被保存爲該接口類型的指針(在你的情況下 - OnFragmentInteractionListener)。

你可以看到行拋出異常:

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

所以如果你有在控制檯「必須實現OnFragmentInteractionListener」 - 你知道的片段連接到應該實行OnFragmentInteractionListener但不活動。