android的list获取点击的值,Android使用RecyclerView实现列表数据选择操作

这些时间做安卓盒子项目,因为安卓电视的显示器比较大,所以一个界面显示 很多数据 ,最多的时候,一个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 dataArray;

//选中后的数据

private List 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 {

private Context mContext;

private List mDatas;

private CheckItemListener mCheckListener;

public CheckAdapter(Context mContext, List 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;

}

}

主界面布局文件:

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">

android:layout_width="match_parent"

android:layout_height="20dp"

android:orientation="horizontal">

android:layout_width="40dp"

android:layout_height="match_parent"

android:text="序号"

android:layout_marginLeft="10dp"

android:textSize="12sp"

android:textColor="#333333"

android:gravity="center"

/>

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"

/>

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"

/>

android:layout_width="100dp"

android:layout_height="match_parent"

android:text="内容"

android:layout_marginLeft="10dp"

android:textSize="12sp"

android:textColor="#333333"

android:gravity="center"

/>

android:layout_width="80dp"

android:layout_height="match_parent"

android:text="时间"

android:layout_marginLeft="10dp"

android:textSize="12sp"

android:textColor="#333333"

android:gravity="center"

/>

android:layout_width="match_parent"

android:layout_height="1px"

android:background="#bcbcbc">

android:id="@+id/check_rcy"

android:layout_width="match_parent"

android:layout_height="wrap_content">

列表Item布局:

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/item_content_ll"

android:layout_width="match_parent"

android:layout_height="40dp"

android:orientation="horizontal">

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"

/>

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"

/>

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"

/>

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"

/>

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"

/>

android:layout_width="match_parent"

android:layout_height="1px"

android:background="#bcbcbc"/>

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

70a55eaa8cb8fd486d2f1a125d48e9cd.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值