适配器中的接口使用

时间:2014-04-24 15:55:08

标签: android

我有一个使用接口的自定义适配器。以下是构造函数,如果这是错误的,请告诉我:

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

2 个答案:

答案 0 :(得分:1)

因为你没有设置监听器。你有两个构造函数,只有其中一个设置了监听器。您应该只有一个也接受侦听器的构造函数,如果它为null,则抛出异常。

答案 1 :(得分: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);
}

如果它的工作,听众运作良好,问题在于你如何发送行位置。