2014-04-25 132 views
0

父活动具有一个像这样实例化的字符串列表。从片段传递值到活动时的空指针异常

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(); 
} 

我可以启动应用程序就好了,但是当我选择一个项目的应用程序停止,我得到一个空指针错误时抛出。我究竟做错了什么?

+0

显示你的片段的onAttach,你在哪里初始化mCallback – Raghunandan

+1

你在哪一行得到NullPointerException?请发布堆栈跟踪。 – 1337

回答

0

但是当我选择一个项目的应用程序停止,我得到一个空指针 Excpetion。我究竟做错了什么?

您需要初始化mCallBack。我不确定初始化是否合适。

但您需要下面的内容。

引用文档

片段其 onAttach()生命周期方法的过程中捕获的接口实现,然后可以调用 以便与活动通信的接口方法。

@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"); 
    } 
} 
0

我得到了错误的原因是因为我已经上榜不可改的设置它在cosntructor值。如果我在taskList被创建为成员变量时没有设置值。

private List<String> taskList; 

然后我可以使它成为一个干净的名单在OnCreate

taskList = new ArrayList<String>(); 

事后添加的元素。由于我要扩展它的onCreate中的数据库读取,这不是一个问题。