【问题标题】:Unable to access Inner Interface of class无法访问类的内部接口
【发布时间】:2016-02-21 06:57:05
【问题描述】:

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

这让我发疯?

我在这里做错了什么......

更新:

我发现问题在于缩小。

构建类型 { 发布 { 缩小启用真 } }

RecyclerViewArrayAdapter 和 ListImageItemViewHolder 是名为“Common”的模块的一部分。我在我的项目中引用了这个模块。

现在,当我将一个通用 gradle 设置为“缩小”为 false 时,它​​就可以工作了。 当我将它更改为缩小真实的那一刻,它又回来了。

它看起来像一个编译问题。但是我不能忍受这个错误,也不能将生产版本的 minify 设置为 false。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你不能调用一个你可以实现的接口..
  • @VaibhavG 我正在实现相同的功能 - 请参阅 new ListImageItemViewHolder.ClickListener() { } line
  • @VaibhavG 即使我声明我得到这个错误 private ListImageItemViewHolder.ClickListener clickListener;
  • 确保添加新的proguard例外

标签: java android android-activity android-recyclerview


【解决方案1】:

试试这个,

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


                }
            });

new ListImageItemViewHolder().clickListener 这一行指的是ClickListener clickListener;

然后你实例化它..

使用访问说明符public声明clickListener

【讨论】:

  • 错误:(147, 68) 错误:找不到符号类 ClickListener
【解决方案2】:

好的,没有这样的解决方案,但可以解决。 对我来说,代码没有问题。没有任何红线,但我编译时找不到。但是,当我将 minify 设置为 false 时,它​​可以工作(即使为发布版本设置了 minify 设置并且我正在作为调试运行)。

解决方法是将ClickListener接口从ListImageItemViewHolder类中分离出来;因此没有嵌套接口。

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

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2022-08-15
    • 2023-03-13
    • 2012-04-17
    • 2013-10-21
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多