我有一个适用于recyclerview的适配器类:
public abstract class RecyclerViewArrayAdapter<T, VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<VH> {
...
}
我正在创建一个这样的对象:
new RecyclerViewArrayAdapter<String, ListImageItemViewHolder>(emailAddresses) {
@Override
public ListImageItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
return new ListImageItemViewHolder(v);
}
@Override
public void onBindViewHolder(ListImageItemViewHolder holder, int position) {
holder.setClickListener(new ListImageItemViewHolder.ClickListener() {
@Override
public void onClick(View v, int position, boolean isLongClick) {
}
});
}
};
ListImageItemViewHolder定义如下所示:
public class ListImageItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private ClickListener clickListener;
public ListImageItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
public interface ClickListener {
void onClick(View v, int position, boolean isLongClick);
}
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
}
一切看起来都很好,没有红色标记,但是一旦我编译下面的行就会给我一个错误;
错误:(147,68)错误:找不到符号类ClickListener
像147一样:
holder.setClickListener(new ListImageItemViewHolder.ClickListener() {
@Override
public void onClick(View v, int position, boolean isLongClick) {
}
});
问题:为什么它无法访问ClickListener ..。
它让我疯了吗?我在这里做错了什么......
更新:
我发现问题在于缩小。
buildTypes { 发布 { minifyEnabled是的 } }
RecyclerViewArrayAdapter和ListImageItemViewHolder是名为“Common”的模块的一部分。我在我的项目中引用了这个模块。
现在当我将一个共同的gradle设置为“minify”为false时,它可以工作。 我改变它以缩小真实的那一刻,它又回来了。
它看起来像编译问题。但我不能忍受这个错误,也不能为生产构建设置minify为false。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
试试这个,
new ListImageItemViewHolder().clickListener = new ClickListener(){
@Override
public void onClick(View v, int position, boolean isLongClick) {
}
});
此行new ListImageItemViewHolder().clickListener
引用ClickListener clickListener;
然后你实例化它..
使用访问说明符 public
声明clickListener答案 1 :(得分:0)
好的,没有解决方案,但解决方法。 对我来说,代码没有错。没有任何红线,但在编译时无法找到。但是,当我将minify设置为false然后它可以工作(即使为发布版本设置了minify设置并且我作为调试运行)。
解决方案是将ClickListener接口与ListImageItemViewHolder类分开;因此没有嵌套接口。
public interface ClickListener {
void onClick(View v, int position, boolean isLongClick);
}