无法访问类的内部接口 [英] Unable to access Inner Interface of class

查看:96
本文介绍了无法访问类的内部接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆