1. 程式人生 > >Android RecyclerView優雅的實現列表單選功能

Android RecyclerView優雅的實現列表單選功能

1.前言

 1.現在有一個簡單的需求,需要實現列表單選功能,如何實現尼?首先我大概說下我實現的思路,首先在Bean(實體類)裡面宣告一個boolean 值,根據這個boolean值去改變RadioButton的是否選中狀態,同時在Activity或者Fragment裡面 宣告一個變數id和當前下標去做對比。下面看下要實現的效果圖!

2.效果圖
如下圖所示

3.程式碼實現步驟:

 private CommonAdapter<SelectAddressModel.ReturnDataBean> mAdapter;
 private List<SelectAddressModel.ReturnDataBean
> mDataList = new ArrayList<>(); //private int posIndex;//記錄當前下標 private int mSelectedPos = -1;//實現單選 變數儲存當前選中的position /* * 獲取個人地址,這就是用Retrofit請求框架去獲取資料,用法就不多講了isState就是SelectAddressModel 實體類裡面宣告的一個boolean值 * */ public void getAddressData(String id) { Api.getApi2().getLoadMemberAddressData
(id) .compose(callbackOnIOToMainThread()) .subscribe(new BaseNetSubscriber<SelectAddressModel>() { @Override public void onNext(SelectAddressModel baseBean) { super.onNext(baseBean); if (baseBean.getReturnData
().size() > 0) { mDataList.addAll(baseBean.getReturnData()); mDataList.get(0).setState(true); } for (int i = 0; i < mDataList.size(); i++) { if (mDataList.get(i).isState()) { mSelectedPos = i; } } mAdapter = new CommonAdapter<SelectAddressModel.ReturnDataBean>(aty, R.layout.layout_select_address, mDataList) { @Override protected void convert(ViewHolder holder, SelectAddressModel.ReturnDataBean item, int position) { LinearLayout linAddress = holder.getView(R.id.linAddress); RadioButton rad_balance = holder.getView(R.id.rad_balance); RadioGroup radioGroup = holder.getView(R.id.rad_address); rad_balance.setText(item.getS_weizhiFull()); if (!item.isState()) { linAddress.setBackgroundColor(getResources().getColor(R.color.colorWhite)); rad_balance.setChecked(false); } else { linAddress.setBackgroundColor(getResources().getColor(R.color.address_bg)); rad_balance.setChecked(true); } rad_balance.setOnClickListener(v -> { //實現單選方方法: 設定資料集時,找到預設選中的pos if (mSelectedPos != position) { //先取消上個item的勾選狀態 mDataList.get(mSelectedPos).setState(false); linAddress.setBackgroundColor(getResources().getColor(R.color.colorWhite)); rad_balance.setChecked(false); notifyItemChanged(mSelectedPos); //設定新Item的勾選狀態 mSelectedPos = position; mDataList.get(mSelectedPos).setState(true); linAddress.setBackgroundColor(getResources().getColor(R.color.address_bg)); rad_balance.setChecked(true); notifyItemChanged(mSelectedPos); } }); } }; mBinding.recycviewAddress.setLayoutManager(new LinearLayoutManager(aty)); mBinding.recycviewAddress.setAdapter(mAdapter); } @Override public void onError(Throwable e) { super.onError(e); } }); }

4.注意要點:
要實現單選功能以上程式碼就ok了,上面程式碼也有註釋,相信你們都能看懂!這裡要說一點 就是當你設定或者取消Item的勾選狀態時候,一定要記得notifyItemChanged去更新當前的下標,其實實現列表單選有很多方法,不止這一種,要是寫的不好的地方勿噴!謝謝,好啦 程式碼就分析到這裡,有啥問題 歡迎留言。