這篇文章主要介紹RecyclerView如何實(shí)現(xiàn)流式標(biāo)簽單選多選功能,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
東寧網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,東寧網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為東寧近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的東寧做網(wǎng)站的公司定做!RecyclerView簡介
RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來講解RecyclerView的用法。
RecyclerView 基本用法
因?yàn)镽ecyclerView屬于新增的控件,Android將RecyclerView定義在support庫里。若要使用RecyclerView,第一步是要在build.gradle中添加對應(yīng)的依賴庫。
前期準(zhǔn)備
依賴的添加:
//瀑布流LayoutManager implementation 'com.google.android:flexbox:1.0.0' //RecyclerView implementation 'com.android.support:design:28.0.0'
使用方法
3.1、多選的實(shí)現(xiàn)
1、使用集合存儲需要存儲或者展示的數(shù)據(jù)
public static Set
2、實(shí)現(xiàn)流式布局的布局管理器
mRecyclerView = (RecyclerView) findViewById(R.id.recycler); FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW, FlexWrap.WRAP){ @Override public boolean canScrollVertically() { return false; } }; mRecyclerView.setLayoutManager(manager);
3、單條點(diǎn)擊事件的處理
mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void OnItemClick(View view, int position) { addOrRemove(position); } @Override public void OnItemLongClick(View view, int position) { } }); private void addOrRemove(int position) { if (positionSet.contains(position)) { // 如果包含,則撤銷選擇 positionSet.remove(position); checkTYpeNameSet.remove(mListData.get(position).getTagName()); } else { // 如果不包含,則添加 positionSet.add(position); checkTYpeNameSet.add(mListData.get(position).getTagName()); } if (positionSet.size() == 0) { // 如果沒有選中任何的item,則退出多選模式 mAdapter.notifyDataSetChanged(); selectMode = false; } else { // 更新列表界面,否則無法顯示已選的item mAdapter.notifyDataSetChanged(); } Log.e("info",positionSet.toString()); Toast.makeText(MultipleChoiceActivity.this,checkTYpeNameSet.toString(),Toast.LENGTH_SHORT).show(); }
4、適配的寫法
public class MultipleRecyclerAdapter extends RecyclerView.Adapter
5、單條布局的XML文件
6、CheckableLayout的使用說明:
實(shí)現(xiàn)了Checkable接口,可用于布局的選擇,設(shè)置選擇的樣式
public class CheckableLayout extends RelativeLayout implements Checkable { private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; private boolean mChecked; public CheckableLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setChecked(boolean b) { if (b != mChecked){ mChecked = b; refreshDrawableState(); } } @Override public boolean isChecked() { return mChecked; } @Override public void toggle() { setChecked(!mChecked); } @Override protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) mergeDrawableStates(drawableState, CHECKED_STATE_SET); return drawableState; }}
3.2、單選的實(shí)現(xiàn)
單選和多選的代碼幾乎完全一致, 只需要修改一部分
1、去除記錄選擇名稱的集合, 將選擇模式設(shè)置為false
public static Set
2 、單條點(diǎn)擊事件需要進(jìn)行修改
mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void OnItemClick(View view, int position) { if (selectMode) { // 如果當(dāng)前處于多選狀態(tài),則進(jìn)入多選狀態(tài)的邏輯 // 維護(hù)當(dāng)前已選的position addOrRemove(position); } else { // 如果不是多選狀態(tài),則進(jìn)入單選事件的業(yè)務(wù)邏輯 if (!positionSet.contains(position)) { // 選擇不同的單位時(shí)取消之前選中的單位 positionSet.clear(); } addOrRemove(position); } String kindName = mListData.get(position).getTagName(); Toast.makeText(SingleChoiceActivity.this, kindName, Toast.LENGTH_SHORT).show(); } @Override public void OnItemLongClick(View view, int position) { } }); private void addOrRemove(int position) { if (positionSet.contains(position)) { // 如果包含,則撤銷選擇 positionSet.remove(position); } else { // 如果不包含,則添加 positionSet.add(position); } if (positionSet.size() == 0) { // 如果沒有選中任何的item,則退出多選模式 mAdapter.notifyDataSetChanged(); selectMode = false; } else { // 更新列表界面,否則無法顯示已選的item mAdapter.notifyDataSetChanged(); } }
以上是“RecyclerView如何實(shí)現(xiàn)流式標(biāo)簽單選多選功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!