将值从Fragment传递给Activity时出现空指针异常

时间:2014-04-25 14:26:43

标签: java android android-fragments

父活动有一个像这样实例化的字符串列表。

    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。我做错了什么?

2 个答案:

答案 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中的数据库中读取,因此这不是问题。