您好我正在尝试将我的活动中的数组列表传递给片段,这就是我所做的:
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
我的想法:
我在说这行
instanceForInterface.onDataRecieved(results);
中的 OnCreate()
在
((FirstActivity) getActivity()).setInterface(this);
OnActivityCreated()
解决方案请??
谢谢
答案 0 :(得分:1)
问题是您的片段onActivityCreated()
方法是在您的活动onCreate()
方法之后调用的。
您可以实现所需行为的最小变化是在您的活动中使用onResumeFragments()
方法。也就是说,从instanceForInterface.onDataRecieved(results);
中删除行onCreate
并添加以下代码:
@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