这些时间做安卓盒子项目,因为安卓电视的显示器比较大,所以一个界面显示 很多数据 ,最多的时候,一个Actvity中用到了好几个RecyclerView。
创新互联建站2013年开创至今,公司以网站制作、做网站、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户上1000家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。
在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;
}
}
主界面布局文件:
<?xml version="1.0" encoding="utf-8"?>
列表Item布局:
<?xml version="1.0" encoding="utf-8"?>
界面布局是随意写的,请根据实际情况调整。上丑图:

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