2014-04-24 102 views
0

我有一個使用接口的自定義適配器。下面是構造函數,請讓我知道這是錯誤的:接口在適配器中的使用

public ImageAdapter(Context c, ArrayList<Bitmap> images, ArrayList folderName, ArrayList<Boolean> isFolder, FolderClickListener listener){ 

     this.context = c; 
     this.images = images; 
     this.folderName = folderName; 
     this.isFolder=isFolder; 
     checkBoxState=new boolean[images.size()]; 
     //imageLoader = ImageLoader.getInstance(); 
     mListener = listener; 

    } 
GetView在適配器,我這樣調用接口

然後:

mListener.folderClicked(position); //Fails with null pointer exception 

這裏是我的接口:

public interface FolderClickListener { 

    void folderClicked(int position); 

} 

然後我在我的MainActivity的方法,它實現了接口:

@Override 
    public void folderClicked(int position) { 

//do stuff in here 
} 

任何想法,爲什麼我得到空指針異常? 編輯:這是我在MainActivity中的適配器,我如何將接口傳遞給此?

adapter = new ImageAdapter(TextDropboxActivity.this, pix, paths, folders); 
      lstView.setAdapter(adapter); 

回答

0

根據你的代碼,你沒有使用它應該的構造函數。

首先,確保您的TextDropboxActivity實現了偵聽器。如果是的話,你會看到覆蓋方法。

其次,你的新的適配器應該是這樣的:

adapter = new ImageAdapter(TextDropboxActivity.this, pix, paths, folders,TextDropboxActivity.this); 
     lstView.setAdapter(adapter); 

適配器構造函數代碼:

public ImageAdapter(Context c, ArrayList<Bitmap> images, ArrayList folderName, ArrayList<Boolean> isFolder, FolderClickListener listener){ 

    this.context = c; 
    this.images = images; 
    this.folderName = folderName; 
    this.isFolder=isFolder; 
    checkBoxState=new boolean[images.size()]; 
    //imageLoader = ImageLoader.getInstance(); 
    mListener = listener; 

} 

第一TextDropboxActivity.this是上下文,而第二個像我的例子是聽衆。

另外,還要確保你調用

mListener.folderClicked(position); 

按鈕按下之後。你也可以嘗試發送硬編碼值就像

mListener.folderClicked(1); 

並登錄您在活動代碼得到什麼檢查,如果一切正常。 例如:

@Override 
public void folderClicked(int position) { 

//do stuff in here 
Log.i("test",""+position); 
} 

如果其工作,聽者運作良好,問題是你是如何發送行的位置。

+0

謝謝 - 這工作得很好,我不知道我必須作爲監聽器傳入TextDropboxActivity.this。謝謝你的幫助! – user3437721

+0

雖然出於好奇。在我的適配器代碼中,我只調用了mListener.folderClicked(position);如果它是使用if ... else的文件夾。但是當我點擊圖片時,活動代碼仍然被調用(我使用Toast來測試)。所以它被稱爲如果你點擊一個文件夾圖標或圖像圖標... – user3437721

+0

所以它現在確定,或者你還有更多的幫助? – SacreDeveloper

1

因爲您沒有設置偵聽器。您有兩個構造函數,並且只有其中一個設置偵聽器。你應該只有一個構造函數也接受一個監聽器,如果它爲空則拋出一個異常。

+0

如何在我的MainActivity中綁定我的適配器時傳遞監聽器:adapter = new ImageAdapter(TextDropboxActivity.this,pix,paths); lstView.setAdapter(adapter); – user3437721

+0

通過'this' - 當你的活動實現接口。 – zmbq

+1

或簡單地將一個方法setListener(listener)添加到您的適配器類。 – kiruwka