首页 > 系统 > Android > 正文

Android使用RecyclerView实现列表数据选择操作

2019-12-12 02:37:56
字体:
来源:转载
供稿:网友

这些时间做安卓盒子项目,因为安卓电视的显示器比较大,所以一个界面显示 很多数据 ,最多的时候,一个Actvity中用到了好几个RecyclerView。

在RecyclerView中实现Item选中处理时,发现用CheckBox的OnCheckedChangeListener监听事件时,会达不到预期,所以用了OnClickListener来实现。

主界面代码:

public class CheckRecyclerViewActivity extends AppCompatActivity implements CheckAdapter.CheckItemListener {  //适配器  private CheckAdapter mCheckAdapter;  //列表  private RecyclerView check_rcy;  //全选操作  private CheckBox check_all_cb;  //列表数据  private List<CheckBean> dataArray;  //选中后的数据  private List<CheckBean> checkedList;  private boolean isSelectAll;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_check_recyclerview);    checkedList = new ArrayList<>();    initDatas();    initViews();  }  private void initViews() {    check_rcy = (RecyclerView) findViewById(R.id.check_rcy);    check_all_cb = (CheckBox) findViewById(R.id.check_all_cb);    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);    check_rcy.setLayoutManager(linearLayoutManager);    mCheckAdapter = new CheckAdapter(this, dataArray, this);    check_rcy.setAdapter(mCheckAdapter);    //如果使用CheckBox的OnCheckedChangeListener事件,则选中事件会有一些意想不到的结果,欢迎体验    //在列表Item中的CheckBox也一样的效果    check_all_cb.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        isSelectAll = !isSelectAll;        checkedList.clear();        if (isSelectAll) {//全选处理          checkedList.addAll(dataArray);        }        for (CheckBean checkBean : dataArray) {          checkBean.setChecked(isSelectAll);        }        mCheckAdapter.notifyDataSetChanged();      }    });  }  private void initDatas() {    dataArray = new ArrayList<>();    for (int i = 0; i < 20; i++) {      CheckBean bean = new CheckBean();      bean.setOrder(String.valueOf(i + 1));      bean.setName("名称_" + i);      bean.setContent("第" + i + "条内容");      bean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));      dataArray.add(bean);    }  }  @Override  public void itemChecked(CheckBean checkBean, boolean isChecked) {    //处理Item点击选中回调事件    if (isChecked) {      //选中处理      if (!checkedList.contains(checkBean)) {        checkedList.add(checkBean);      }    } else {      //未选中处理      if (checkedList.contains(checkBean)) {        checkedList.remove(checkBean);      }    }    //判断列表数据是否全部选中    if (checkedList.size() == dataArray.size()) {      check_all_cb.setChecked(true);    } else {      check_all_cb.setChecked(false);    }  }}

列表数据适配器:

public class CheckAdapter extends RecyclerView.Adapter<CheckAdapter.ViewHolder> {  private Context mContext;  private List<CheckBean> mDatas;  private CheckItemListener mCheckListener;  public CheckAdapter(Context mContext, List<CheckBean> mDatas, CheckItemListener mCheckListener) {    this.mContext = mContext;    this.mDatas = mDatas;    this.mCheckListener = mCheckListener;  }  @Override  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View view = LayoutInflater.from(mContext).inflate(R.layout.check_recyclerview_item, parent, false);    ViewHolder viewHolder = new ViewHolder(view);    return viewHolder;  }  @Override  public void onBindViewHolder(final ViewHolder holder, final int position) {    final CheckBean bean = mDatas.get(position);    holder.item_order_tv.setText(bean.getOrder());    holder.item_name_tv.setText(bean.getName());    holder.item_content_tv.setText(bean.getContent());    holder.item_time_tv.setText(bean.getTime());    holder.item_cb.setChecked(bean.isChecked());    //点击实现选择功能,当然可以把点击事件放在item_cb对应的CheckBox上,只是焦点范围较小    holder.item_content_ll.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        bean.setChecked(!bean.isChecked());        holder.item_cb.setChecked(bean.isChecked());        if (null != mCheckListener) {          mCheckListener.itemChecked(bean, holder.item_cb.isChecked());        }        notifyDataSetChanged();      }    });  }  @Override  public int getItemCount() {    return mDatas.size();  }  public class ViewHolder extends RecyclerView.ViewHolder {    //序号    private TextView item_order_tv;    //选择    private CheckBox item_cb;    //整个条目    private LinearLayout item_content_ll;    //名称    TextView item_name_tv;    //内容    TextView item_content_tv;    //时间    private TextView item_time_tv;    public ViewHolder(View itemView) {      super(itemView);      item_order_tv = (TextView) itemView.findViewById(R.id.item_order_tv);      item_cb = (CheckBox) itemView.findViewById(R.id.item_cb);      item_name_tv = (TextView) itemView.findViewById(R.id.item_name_tv);      item_content_tv = (TextView) itemView.findViewById(R.id.item_content_tv);      item_time_tv = (TextView) itemView.findViewById(R.id.item_time_tv);      item_content_ll = (LinearLayout) itemView.findViewById(R.id.item_content_ll);    }  }  public interface CheckItemListener {    void itemChecked(CheckBean checkBean, boolean isChecked);  }}

测试数据实体BEAN:

public class CheckBean implements Serializable {  private String order;  private String name;  private String content;  private String time;  private boolean isChecked;  public String getOrder() {    return order;  }  public void setOrder(String order) {    this.order = order;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getContent() {    return content;  }  public void setContent(String content) {    this.content = content;  }  public String getTime() {    return time;  }  public void setTime(String time) {    this.time = time;  }  public boolean isChecked() {    return isChecked;  }  public void setChecked(boolean checked) {    isChecked = checked;  }}

主界面布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_margin="10dp"    android:background="@drawable/drawable_white_round_bg"    android:orientation="vertical">  <LinearLayout      android:layout_width="match_parent"      android:layout_height="20dp"      android:orientation="horizontal">    <TextView        android:layout_width="40dp"        android:layout_height="match_parent"        android:text="序号"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <CheckBox        android:id="@+id/check_all_cb"        android:layout_width="12dp"        android:layout_gravity="center"        android:button="@null"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_height="12dp"        android:background="@drawable/drawable_cb_selector"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:text="名称"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:layout_width="100dp"        android:layout_height="match_parent"        android:text="内容"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:layout_width="80dp"        android:layout_height="match_parent"        android:text="时间"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />  </LinearLayout>  <View      android:layout_width="match_parent"      android:layout_height="1px"      android:background="#bcbcbc"></View>  <android.support.v7.widget.RecyclerView      android:id="@+id/check_rcy"      android:layout_width="match_parent"      android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout>

列表Item布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"       android:layout_width="match_parent"       android:layout_height="wrap_content">  <LinearLayout      android:id="@+id/item_content_ll"      android:layout_width="match_parent"      android:layout_height="40dp"      android:orientation="horizontal">    <TextView        android:id="@+id/item_order_tv"        android:layout_width="40dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <CheckBox        android:id="@+id/item_cb"        android:layout_width="20dp"        android:layout_gravity="center"        android:button="@null"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_height="20dp"        android:background="@drawable/drawable_cb_selector"        />    <TextView        android:id="@+id/item_name_tv"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:id="@+id/item_content_tv"        android:layout_width="100dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:id="@+id/item_time_tv"        android:layout_width="120dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />  </LinearLayout>  <View      android:layout_width="match_parent"      android:layout_height="1px"      android:background="#bcbcbc"/></LinearLayout>

界面布局是随意写的,请根据实际情况调整。上丑图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表