无法访问类的内部接口 [英] Unable to access Inner Interface of class
问题描述
我有一个用于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;
}
}
一切看起来都很好,没有红色标记,但是,一旦我编译了下面的代码,就会给我一个n错误;
错误:(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设置为最小化"为false时,它就可以工作了. 当我将其最小化时,它又回来了.
它看起来像是编译问题.但是我不能忍受这个错误,也不能为生产版本将minify设置为false.
有人可以帮我解决问题吗?
好的,没有解决方案,但是可以解决. 对我来说,代码没有错.没有任何红线,但是在我编译时找不到.但是,当我将minify设置为false时,它就可以工作(即使为发布版本设置了minify设置,并且我正在以调试方式运行).
解决方案是将ClickListener接口与ListImageItemViewHolder类分开;因此没有嵌套接口.
public interface ClickListener {
void onClick(View v, int position, boolean isLongClick);
}
I have an adapter class for recyclerview:
public abstract class RecyclerViewArrayAdapter<T, VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<VH> {
...
}
I am creating an object like this :
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) {
}
});
}
};
The ListImageItemViewHolder definition looks like this:
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;
}
}
Everything looks fine, no red mark, however as soon as I compile the following line gives me a n error;
Error:(147, 68) error: cannot find symbol class ClickListener
Like 147 is :
holder.setClickListener(new ListImageItemViewHolder.ClickListener() {
@Override
public void onClick(View v, int position, boolean isLongClick) {
}
});
Question: Why it is not able access ClickListener .. .
It driving me crazy ?
What wrong am I doing here...
UPDATES:
I found that the issue is with minify.
buildTypes { release { minifyEnabled true } }
The RecyclerViewArrayAdapter and ListImageItemViewHolder is the part of a module called "Common". I refer this module in my project.
Now when I have a common gradle set to "minify" to false it works. The moment I change it to minify true, it comes back.
It looks like a compilation issue. But I cannot live with this error nor I can set minify to false for the production build.
Can someone please help me with the work around ?
Ok there is no solution as such but a work around. To me, it is nothing wrong with the code. There is no red line whatsoever but it cannot find when I compile. However, when I set minify to false then it works (even when the minify setting is set for release version and I am running as debug).
The solution is to separate out ClickListener interface away from ListImageItemViewHolder class; thus no to nested interface.
public interface ClickListener {
void onClick(View v, int position, boolean isLongClick);
}
这篇关于无法访问类的内部接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!