RecyclerView Adapter OnClick parameter

被刻印的时光 ゝ 提交于 2019-12-11 04:43:12

问题


I have a RecyclerView Adapter which needs to implement OnClick listeners on several of the views inside each item. However, the OnClick listener needs to change a variable outside of the listener, but this is a problem since it can only use final variables inside the OnClick listener. Here is my code where I implements the OnClick listener:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    final boolean liked = false;
    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // here I can only reference a final variable, but I need to change it
            if (!liked){
                liked = true;
            }
        }
    });
}

I also tried to create the variable as a class variable in the ViewHolder class and use it as holder.liked, but still it needs to be final. How can i get aroud this issue?


回答1:


Try implementing onClickListener on an extended viewholder instead:

 private class LikeHolder extends RecyclerView.ViewHolder
    implements View.OnClickListener {

    private boolean mLiked = false;

    public LikeHolder(LayoutInflater inflater, ViewGroup parent) {
        super(inflater.inflate(R.layout.your_holder_layout, parent, false));

        itemView.setOnClickListener(this);
        ...
    }


    @Override
    public void onClick(View view) {
     if (!mLiked){
            mLiked = true;
    }
}


来源:https://stackoverflow.com/questions/42937209/recyclerview-adapter-onclick-parameter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!