国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用RecyclerView實現列表數據選擇操作

2019-12-12 02:37:56
字體:
來源:轉載
供稿:網友

這些時間做安卓盒子項目,因為安卓電視的顯示器比較大,所以一個界面顯示 很多數據 ,最多的時候,一個Actvity中用到了好幾個RecyclerView。

在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<CheckBean> dataArray;  //選中后的數據  private List<CheckBean> 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<CheckAdapter.ViewHolder> {  private Context mContext;  private List<CheckBean> mDatas;  private CheckItemListener mCheckListener;  public CheckAdapter(Context mContext, List<CheckBean> 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"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_margin="10dp"    android:background="@drawable/drawable_white_round_bg"    android:orientation="vertical">  <LinearLayout      android:layout_width="match_parent"      android:layout_height="20dp"      android:orientation="horizontal">    <TextView        android:layout_width="40dp"        android:layout_height="match_parent"        android:text="序號"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <CheckBox        android:id="@+id/check_all_cb"        android:layout_width="12dp"        android:layout_gravity="center"        android:button="@null"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_height="12dp"        android:background="@drawable/drawable_cb_selector"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:text="名稱"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:layout_width="100dp"        android:layout_height="match_parent"        android:text="內容"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:layout_width="80dp"        android:layout_height="match_parent"        android:text="時間"        android:layout_marginLeft="10dp"        android:textSize="12sp"        android:textColor="#333333"        android:gravity="center"        />  </LinearLayout>  <View      android:layout_width="match_parent"      android:layout_height="1px"      android:background="#bcbcbc"></View>  <android.support.v7.widget.RecyclerView      android:id="@+id/check_rcy"      android:layout_width="match_parent"      android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout>

列表Item布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"       android:layout_width="match_parent"       android:layout_height="wrap_content">  <LinearLayout      android:id="@+id/item_content_ll"      android:layout_width="match_parent"      android:layout_height="40dp"      android:orientation="horizontal">    <TextView        android:id="@+id/item_order_tv"        android:layout_width="40dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <CheckBox        android:id="@+id/item_cb"        android:layout_width="20dp"        android:layout_gravity="center"        android:button="@null"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_height="20dp"        android:background="@drawable/drawable_cb_selector"        />    <TextView        android:id="@+id/item_name_tv"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:id="@+id/item_content_tv"        android:layout_width="100dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />    <TextView        android:id="@+id/item_time_tv"        android:layout_width="120dp"        android:layout_height="match_parent"        android:layout_marginLeft="10dp"        android:textSize="15sp"        android:textColor="#333333"        android:gravity="center"        />  </LinearLayout>  <View      android:layout_width="match_parent"      android:layout_height="1px"      android:background="#bcbcbc"/></LinearLayout>

界面布局是隨意寫的,請根據實際情況調整。上丑圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临澧县| 亳州市| 水城县| 西乌| 桂东县| 苏尼特右旗| 湄潭县| 昌宁县| 木里| 满洲里市| 江北区| 台中市| 达孜县| 高青县| 北辰区| 怀远县| 佛山市| 镇安县| 双城市| 济宁市| 罗城| 恭城| 安宁市| 榆林市| 和田市| 玉田县| 敦煌市| 罗甸县| 河南省| 永修县| 阳高县| 舟曲县| 江都市| 汉阴县| 霍山县| 双牌县| 陈巴尔虎旗| 竹山县| 沅陵县| 黑龙江省| 孙吴县|