2017-07-14 27 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

相关问题