成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

RecyclerView如何實現(xiàn)流式標簽單選多選功能

這篇文章主要介紹RecyclerView如何實現(xiàn)流式標簽單選多選功能,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站-專業(yè)網站定制、快速模板網站建設、高性價比吳川網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式吳川網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋吳川地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

RecyclerView簡介

RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實現(xiàn)數(shù)據縱向滾動,也可以實現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法。

RecyclerView 基本用法

因為RecyclerView屬于新增的控件,Android將RecyclerView定義在support庫里。若要使用RecyclerView,第一步是要在build.gradle中添加對應的依賴庫。

前期準備

依賴的添加:

//瀑布流LayoutManager  implementation 'com.google.android:flexbox:1.0.0'  //RecyclerView  implementation 'com.android.support:design:28.0.0'

使用方法

3.1、多選的實現(xiàn)

1、使用集合存儲需要存儲或者展示的數(shù)據

public static Set<Integer> positionSet = new HashSet<>(); //用于存儲選擇的位置  private boolean selectMode = true; //選擇模式 多選或者單選 true 多選  public Set<String> checkTYpeNameSet = new HashSet<>(); //用于存儲選擇項的名稱

2、實現(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、單條點擊事件的處理

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<MultipleRecyclerAdapter.ViewHolder> {  private Context mContext;  private List<TestBean> mListData = new ArrayList<>();  private OnItemClickListener mOnItemClickListener;  public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {    this.mOnItemClickListener = mOnItemClickListener;  }  public MultipleRecyclerAdapter(Context mContext, List<TestBean> mListData) {   // mListData = new ArrayList<>();    this.mContext = mContext;    this.mListData = mListData;  }  public void update(List<TestBean> list){    if(list != null && list.size() > 0){      mListData.addAll(list);      notifyDataSetChanged();    }  }  class ViewHolder extends RecyclerView.ViewHolder{    TextView typeTv;    CheckableLayout rootLayout;    public ViewHolder(@NonNull View itemView) {      super(itemView);      typeTv = (TextView) itemView.findViewById(R.id.alive_type_tv);      rootLayout = (CheckableLayout) itemView.findViewById(R.id.root_layout);    }  }  @NonNull  @Override  public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {    if(mContext == null){      mContext = viewGroup.getContext();    }    View view = LayoutInflater.from(mContext).inflate(R.layout.item_recycler,viewGroup,false);    return new ViewHolder(view);  }  @Override  public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {    Set<Integer> positionSet = MultipleChoiceActivity.positionSet;    //檢查set里是否包含position,包含則顯示選中的背景色,不包含則反之    if (positionSet.contains(position)) {      holder.rootLayout.setChecked(true);      holder.typeTv.setTextColor(mContext.getResources().getColor(R.color.white));    } else {      holder.rootLayout.setChecked(false);      holder.typeTv.setTextColor(mContext.getResources().getColor(R.color.grey_60));    }    TestBean bean = mListData.get(position);    holder.typeTv.setText(bean.getTagName());    if(mOnItemClickListener != null) {      holder.itemView.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {          int pos = holder.getLayoutPosition();          mOnItemClickListener.OnItemClick(holder.itemView, pos);          holder.rootLayout.setChecked(true);        }      });    }  }  @Override  public int getItemCount() {    return mListData != null ? mListData.size() : 0;  }}

5、單條布局的XML文件

<?xml version="1.0" encoding="utf-8"?><com.lhx.flowtagdemo.recycler.CheckableLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginLeft="8dp"  android:layout_marginTop="6dp"  android:id="@+id/root_layout"  android:background="@drawable/type_select_bg_color"  xmlns:tools="http://schemas.android.com/tools">  <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:paddingRight="18dp"    android:paddingLeft="18dp"    android:gravity="center"    android:textSize="14sp"    tools:text="醫(yī)藥"    android:id="@+id/alive_type_tv"    android:textColor="#60000000"    android:paddingBottom="10dp"    android:paddingTop="10dp" /></com.lhx.flowtagdemo.recycler.CheckableLayout>

6、CheckableLayout的使用說明:

實現(xiàn)了Checkable接口,可用于布局的選擇,設置選擇的樣式

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、單選的實現(xiàn)

單選和多選的代碼幾乎完全一致, 只需要修改一部分

1、去除記錄選擇名稱的集合, 將選擇模式設置為false

public static Set<Integer> positionSet = new HashSet<>();  private boolean selectMode = false; //選擇模式 多選或者單選 true 多選

2 、單條點擊事件需要進行修改

mAdapter.setOnItemClickListener(new OnItemClickListener() {      @Override      public void OnItemClick(View view, int position) {        if (selectMode) {          // 如果當前處于多選狀態(tài),則進入多選狀態(tài)的邏輯          // 維護當前已選的position          addOrRemove(position);        } else {          // 如果不是多選狀態(tài),則進入單選事件的業(yè)務邏輯          if (!positionSet.contains(position)) {            // 選擇不同的單位時取消之前選中的單位            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如何實現(xiàn)流式標簽單選多選功能”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞標題:RecyclerView如何實現(xiàn)流式標簽單選多選功能
網頁網址:http://jinyejixie.com/article16/pochdg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網站建設、App設計、電子商務、網頁設計公司、外貿建站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設
合作市| 开江县| 凯里市| 资溪县| 西乡县| 和硕县| 盐池县| 泰州市| 颍上县| 汉寿县| 大余县| 洪泽县| 图们市| 宜都市| 巴林左旗| 兰考县| 永年县| 耿马| 建水县| 东兰县| 锦州市| 巴马| 江陵县| 闵行区| 巩留县| 乐清市| 蒙山县| 关岭| 和龙市| 兴宁市| 周至县| 新晃| 九江市| 金阳县| 额尔古纳市| 理塘县| 都兰县| 静宁县| 泾阳县| 河源市| 凌海市|