我有一个使用接口的自定义适配器。以下是构造函数,如果这是错误的,请告诉我:
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 :(得分: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);
}
如果它的工作,听众运作良好,问题在于你如何发送行位置。