ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 在RecyclerView中使用CardView和OnClickListener的问题

2019-07-25 00:35:05  阅读:191  来源: 互联网

标签:android android-recyclerview android-cardview


我使用CardView布局作为RecyclerView的Row.但是,我在将OnClickListener附加到布局时遇到问题.
我正在使用以下布局

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/unit_5"
    android:clickable="true"
    android:longClickable="true"
    card_view:cardCornerRadius="@dimen/unit_5">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/spinnerWidth"
        android:background="@drawable/row_item_background"
        android:clickable="true"
        android:orientation="vertical"
        android:padding="@dimen/dialog_left_padding">

<!-- Other items -->

        </LinearLayout>

        </android.support.v7.widget.CardView>

以下是我的适配器和ViewHolder

 private class SampleAdapter extends RecyclerView.Adapter<SampleViewHolder> {
        ArrayList<Item> arrayList;
        private LayoutInflater inflater;

        public SampleAdapter(Context context) {
            inflater = LayoutInflater.from(context);
            this.arrayList = new ArrayList<>();
            arrayList.addAll(items);
        }

        @Override
        public SampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = inflater.inflate(R.layout.layout1, parent, false);
            SampleViewHolder holder = new SampleViewHolder(view);
            holder.setClickHandler(handler);
            return holder;
        }

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

        }

        @Override
        public int getItemCount() {
            return arrayList.size();
        }

    }

  static class SampleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        TextView name;
        IClickHandler clickHandler;
        public IClickHandler getClickHandler() {
            return clickHandler;
        }

        public void setClickHandler(IClickHandler clickHandler) {
            this.clickHandler = clickHandler;
        }

        public SampleViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView
                    .findViewById(R.id.name);
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
        }


        @Override
        public void onClick(View view) {
            if (getClickHandler() != null) {
                getClickHandler().onItemClicked(view, getLayoutPosition());
            }
        }

        @Override
        public boolean onLongClick(View view) {
            if (getClickHandler() != null) {
                getClickHandler().onItemLongClicked(view, getLayoutPosition());
            }
            return true;
        }
    }

但是这个onClick永远不会被解雇.

但是,如果我用LinearLayout替换CardView,每件事都可以.
我不知道这里有什么问题.有人可以帮助我吗?

谢谢.

解决方法:

实际上实现onClick非常简单,我不确定自定义点击处理程序(IClickHandler)的实现.

首先,View持有人应该只是:

static class SampleViewHolder extends RecyclerView.ViewHolder {
  TextView name;

  public SampleViewHolder(View itemView) {
    super(itemView);
    name = (TextView) itemView.findViewById(R.id.name);
  }
}

然后在SampleAdapter中

@Override
public SampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  View view = inflater.inflate(R.layout.layout1, parent, false);
  SampleViewHolder holder = new SampleViewHolder(view);
  return holder;
}

@Override
public void onBindViewHolder(SampleViewHolder holder, int position) {
    final Item item = arrayList.get(position);

    holder.name.setOnClickListener(new View.OnClickListener(){

       @Override
       public void onClick(View view) {
         //notice I implemented onClickListener here
         // so I can associate this click with final Item item           
       }

    });

}

标签:android,android-recyclerview,android-cardview
来源: https://codeday.me/bug/20190725/1527904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有