父活动有一个像这样实例化的字符串列表。
List<String> taskList = asList("Write some code", "Database stuff", "Test the cloud!");
它还有一个HeadlineSelected-listener实现为接口,以及ArticleSelected方法。 ArticleSelected方法从列表中删除一个元素。
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onArticleSelected(int position) {
taskList.remove(position);
}
在片段中,我有一个HeadlineListener来发送东西给它的父活动。
OnHeadlineSelectedListener mCallback;
在片段中,一旦选择了Item,我就会使用HeadlineListener。
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
mCallback.onArticleSelected(position);
finish();
}
我可以很好地启动应用程序,但是当我选择一个项目时,应用程序停止并且我得到一个Null Pointer Excpetion。我做错了什么?
答案 0 :(得分:0)
但是当我选择一个项目时,应用程序停止,我得到一个空指针 错误时抛出。我做错了什么?
您需要初始化mCallBack
。我不确定初始化是否是正确的术语。
但你需要以下内容。
引用文档
Fragment在其中捕获接口实现 onAttach()生命周期方法然后可以调用Interface方法 为了与活动沟通。
@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 {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
答案 1 :(得分:0)
我收到错误的原因是因为我通过在cosntructor中设置它的值来使List无法改变。当taskList被创建为成员变量时,我根本没有设置值。
private List<String> taskList;
然后我可以将它变成onCreate
中的干净列表taskList = new ArrayList<String>();
然后添加元素。由于我要将其扩展为从onCreate中的数据库中读取,因此这不是问题。