0

我在片段中創建了一個接口,並在父活動中實現了它。android-接口中的片段將在onAttach()中實例化,否則不會

當代碼看起來是這樣的,一切完美的作品:

public class ExercisesCatsFragment extends Fragment { 
OnCategorySelected mCallback; 
... 
    @Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mCallback = (OnCategorySelected) activity; 
} 

但是,當我嘗試實例mCallback在類中,我得到一個NullPointerException當接口調用。非工作代碼看起來像這樣(沒有覆蓋的onAttach()):

public class ExercisesCatsFragment extends Fragment { 
OnCategorySelected mCallback = (OnCategorySelected) this.getActivity(); 

有誰知道這背後的原因是什麼?父級活動是FragmentActivity;這可能是錯誤嗎?

謝謝

+2

您正在'Fragment'的主體中調用'this.getActivity()' - 此時它沒有附加到'Activity'。只要按照您在第一個代碼塊中顯示的方式進行操作即可。 – Squonk

+0

你說得對。它完全放棄了我的想法。請將此作爲答案提交,以便我可以評價/接受它:) – LoneDuck

+0

我已將我的評論轉換爲答案。很高興幫助。 – Squonk

回答

4

在您呼叫的片段的主體this.getActivity()第二(非工作)代碼 - 在這一點上它沒有連接到Activity所以this.getActivity()將返回null

只要按照您在第一個代碼塊中顯示的方式或者在FragmentonCreate(...)方法中執行此操作即可。