2017-07-14 25 views
-4

你好,所以我想從我的活動傳遞一個數組列表的片段傳遞數組列表,這是我做過什麼:空對象引用,而嘗試使用接口

FirstActivity:

AdminInterface instanceForInterface; 

OnCreate 
// 
System.out.println(results.size) ; //works fine 
instanceForInterface.onDataRecieved(results); // here I am getting the exception 
// 

public interface AdminInterface { 
    void onDataRecieved(ArrayList <Result> response); 
} 



public void setInterface(UserFragment anInterface) { 
    this.instanceForInterface = anInterface; 
} 

片段

OnActivityCreated 
((FirstActivity) getActivity()).setInterface(this); 

@Override 
public void onDataRecieved(ArrayList<Result> response) { 
    processData(response); 
} 

異常

Attempt to invoke interface method 'void **************.onDataRecieved(java.util.ArrayList)' on a null object reference 

我想什麼:

我在OnActivityCreated()

解決方案調用此行

instanceForInterface.onDataRecieved(results);OnCreate()

((FirstActivity) getActivity()).setInterface(this);在初始化之前,請?

謝謝

+3

的可能的複製[?什麼是空指針異常,以及如何解決呢(https://stackoverflow.com/questions/218384/什麼是一個nullpointerexception和如何做我修復它) – SripadRaj

+0

放在'onAttach'而不是'OnActivityCreated' –

+0

更好地傳遞'ArrayList'作爲'Bundle' https://stackoverflow.com/問題/ 17436298 /如何傳遞變量從活動到碎片並傳遞迴 –

回答

1

的問題是,您的片段的onActivityCreated()方法您的活動的onCreate()方法後調用。

您可以爲實現所需行爲而做出的最小更改是在您的活動中使用onResumeFragments()方法。也就是說,從你的onCreate刪除該行instanceForInterface.onDataRecieved(results);並添加以下代碼:

@Override 
protected void onResumeFragments() { 
    super.onResumeFragments(); 
    instanceForInterface.onDataRecieved(results); 
} 

onResumeFragments()將被系統既您的活動的onCreate()和你的片段的方法onActivityCreated()後調用。

這就是說,機會是相當不錯的,你會完全用不同的方法更好。例如,你可以讓你的活動公開一個results的getter並讓你的片段檢索結果來處理(而不是讓你的活動存儲對片段的引用)。

進一步閱讀有關的活動和片段生命週期: https://developer.android.com/guide/components/activities/activity-lifecycle.html https://developer.android.com/guide/components/fragments.html

相關問題