2014-04-25 75 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中的數據庫讀取,這不是一個問題。