Adapter中的接口使用[英] Interface use in 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;

    }

然后在我的 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);

推荐答案

根据您的代码,您没有按照应有的方式使用构造函数.

首先,确保你的 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);
}

如果它工作正常,监听器运行良好,问题在于你如何发送行位置.

其他推荐答案

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

查看更多