新聞中心
這些時(shí)間做安卓盒子項(xiàng)目,因?yàn)榘沧侩娨暤娘@示器比較大,所以一個(gè)界面顯示 很多數(shù)據(jù) ,最多的時(shí)候,一個(gè)Actvity中用到了好幾個(gè)RecyclerView。
創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,公司以網(wǎng)站制作、做網(wǎng)站、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上1000家,涉及國內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
在RecyclerView中實(shí)現(xiàn)Item選中處理時(shí),發(fā)現(xiàn)用CheckBox的OnCheckedChangeListener監(jiān)聽事件時(shí),會(huì)達(dá)不到預(yù)期,所以用了OnClickListener來實(shí)現(xiàn)。
主界面代碼:
public class CheckRecyclerViewActivity extends AppCompatActivity implements CheckAdapter.CheckItemListener { //適配器 private CheckAdapter mCheckAdapter; //列表 private RecyclerView check_rcy; //全選操作 private CheckBox check_all_cb; //列表數(shù)據(jù) private ListdataArray; //選中后的數(shù)據(jù) 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事件,則選中事件會(huì)有一些意想不到的結(jié)果,歡迎體驗(yàn) //在列表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 + "條內(nè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點(diǎn)擊選中回調(diào)事件 if (isChecked) { //選中處理 if (!checkedList.contains(checkBean)) { checkedList.add(checkBean); } } else { //未選中處理 if (checkedList.contains(checkBean)) { checkedList.remove(checkBean); } } //判斷列表數(shù)據(jù)是否全部選中 if (checkedList.size() == dataArray.size()) { check_all_cb.setChecked(true); } else { check_all_cb.setChecked(false); } } }
列表數(shù)據(jù)適配器:
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()); //點(diǎn)擊實(shí)現(xiàn)選擇功能,當(dāng)然可以把點(diǎn)擊事件放在item_cb對(duì)應(yīng)的CheckBox上,只是焦點(diǎn)范圍較小 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 { //序號(hào) private TextView item_order_tv; //選擇 private CheckBox item_cb; //整個(gè)條目 private LinearLayout item_content_ll; //名稱 TextView item_name_tv; //內(nèi)容 TextView item_content_tv; //時(shí)間 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); } }
測試數(shù)據(jù)實(shí)體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"?>
界面布局是隨意寫的,請(qǐng)根據(jù)實(shí)際情況調(diào)整。上丑圖:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)頁題目:Android使用RecyclerView實(shí)現(xiàn)列表數(shù)據(jù)選擇操作
本文地址:http://www.dlmjj.cn/article/gehodg.html