简体   繁体   English

无法访问类的内部接口

[英]Unable to access Inner Interface of class

I have an adapter class for recyclerview: 我有一个适用于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: 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;
    }
  }

Everything looks fine, no red mark, however as soon as I compile the following line gives me an error; 一切看起来都很好,没有红色标记,但是一旦我编译下面的行就会给我一个错误;

Error:(147, 68) error: cannot find symbol class ClickListener 错误:(147,68)错误:找不到符号类ClickListener

Like 147 is : 像147一样:

holder.setClickListener(new ListImageItemViewHolder.ClickListener() {
                    @Override
                    public void onClick(View v, int position, boolean isLongClick) {


                    }
                });

Question: Why it is not able access ClickListener .. . 问题:为什么它无法访问ClickListener ..

It driving me crazy ? 它让我疯了吗?

What wrong am I doing here... 我在这做什么错...

UPDATES: 更新:

I found that the issue is with minify. 我发现问题在于缩小。

buildTypes { release { minifyEnabled true } } buildTypes {release {minifyEnabled true}}

The RecyclerViewArrayAdapter and ListImageItemViewHolder is the part of a module called "Common". RecyclerViewArrayAdapter和ListImageItemViewHolder是名为“Common”的模块的一部分。 I refer this module in my project. 我在我的项目中引用了这个模块。

Now when I have a common gradle set to "minify" to false it works. 现在,当我将一个共同的gradle设置为“minify”为false时,它可以工作。 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. 但我不能忍受这个错误,也不能为生产构建设置minify为false。

Can someone please help me with the work around ? 有人可以帮我解决这个问题吗?

在此输入图像描述

Try this, 尝试这个,

new ListImageItemViewHolder().clickListener = new ClickListener(){
                @Override
                public void onClick(View v, int position, boolean isLongClick) {


                }
            });

This line new ListImageItemViewHolder().clickListener refers to ClickListener clickListener; 这行new ListImageItemViewHolder().clickListener引用ClickListener clickListener;

Then you instantiate it.. 然后你实例化它..

Declare clickListener using access specifier public 使用访问说明符public声明clickListener

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). 但是,当我将minify设置为false时,它会起作用(即使为发布版本设置了minify设置并且我作为调试运行)。

The solution is to separate out ClickListener interface away from ListImageItemViewHolder class; 解决方案是将ClickListener接口与ListImageItemViewHolder类分开; thus no to nested interface. 因此没有嵌套接口。

 public interface ClickListener {
        void onClick(View v, int position, boolean isLongClick);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM