美文网首页程序员
安卓从入门到乞討 List View一键点击Item全选中的实现

安卓从入门到乞討 List View一键点击Item全选中的实现

作者: 走在路上從未回頭 | 来源:发表于2017-03-12 16:14 被阅读0次

    当我们在写商城App时,在购物车这个页面中,会需要要将Listview中的所有物品一键选中,一起结算,这时就要用到Listview的一键点击Item全部选中的功能了

           我写的是一个简单的Demo      只有一个类,一个Adapter而已  所以比较适用于初学android 的来看。

    下面这个是主页面的布局文件

    <?xml version="1.0"encoding="utf-8"?>

    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="horizontal">

    android:id="@+id/tv"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_gravity="center_vertical"/>

    android:id="@+id/line"

    android:layout_width="fill_parent"

    android:layout_height="50dp"

    android:layout_below="@+id/tv"

    android:orientation="horizontal">

    android:id="@+id/bt_selectall"

    android:layout_width="80dp"

    android:layout_height="fill_parent"

    android:text="全选"/>

    android:id="@+id/bt_cancleselectall"

    android:layout_width="80dp"

    android:layout_height="fill_parent"

    android:text="反选"/>

    android:id="@+id/bt_deselectall"

    android:layout_width="80dp"

    android:layout_height="fill_parent"

    android:text="取消选择"/>

    android:id="@+id/lv"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:layout_below="@+id/line"/>

    </RelativeLayout>

    Listview中Item的布局文件

    <?xml version="1.0"encoding="utf-8"?>

    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="horizontal">

    android:id="@+id/item_tv"

    android:layout_width="0dp"

    android:layout_height="wrap_content"

    android:layout_gravity="center_vertical"

    android:layout_weight="1"/>

    android:id="@+id/item_cb"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:clickable="false"

    android:focusable="false"

    android:focusableInTouchMode="false"

    android:gravity="center_vertical"/>

    </LinearLayout>

    下面这些就是核心代码了             基本上本人都 有做一些注释的       有不明白可以看注释

    packagesmile.itheima.com.listviewitemallcheck;

    importandroid.os.Bundle;

    importandroid.support.v7.app.AppCompatActivity;

    importandroid.view.View;

    importandroid.widget.AdapterView;

    importandroid.widget.Button;

    importandroid.widget.LinearLayout;

    importandroid.widget.ListView;

    importandroid.widget.TextView;

    importjava.util.ArrayList;

    importbutterknife.BindView;

    importbutterknife.ButterKnife;

    importbutterknife.OnClick;

    public classMainActivityextendsAppCompatActivity {

    @BindView(R.id.tv)

    TextViewmTv;

    @BindView(R.id.line)

    LinearLayoutmLine;

    @BindView(R.id.bt_selectall)

    ButtonmBtSelectall;

    @BindView(R.id.bt_cancleselectall)

    ButtonmBtCancleselectall;

    @BindView(R.id.bt_deselectall)

    ButtonmBtDeselectall;

    @BindView(R.id.lv)

    ListViewmLv;

    private intcheckNum;// 记录选中的条目数量

    privateTextViewtv_show;// 用于显示选中的条目数量

    privateMyAdaptermAdapter;

    privateArrayListmList;

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ButterKnife.bind(this);

    // 为Adapter准备数据

    initDate();

    // 实例化自定义的MyAdapter

    mAdapter=newMyAdapter(mList,this);

    // 绑定Adapter

    mLv.setAdapter(mAdapter);

    }

    //初始化数据

    private voidinitDate() {

    mList=newArrayList<>();

    for(inti =0; i <15; i++) {

    mList.add("data"+ i);

    }

    }

    @OnClick({R.id.bt_selectall, R.id.bt_cancleselectall, R.id.bt_deselectall})

    public voidonClick(View view) {

    switch(view.getId()) {

    caseR.id.bt_selectall:

    //全选中

    mBtSelectall.setOnClickListener(newView.OnClickListener() {

    @Override

    public voidonClick(View view) {

    for(inti =0; i

    MyAdapter.getIsSelected().put(i,true);

    }

    checkNum=mList.size();

    //通知ListView进行刷新  并将这个方法进行抽取

    datachanged();

    }

    });

    break;

    caseR.id.bt_cancleselectall:

    //反选

    mBtCancleselectall.setOnClickListener(newView.OnClickListener() {

    @Override

    public voidonClick(View view) {

    for(inti =0; i

    if(MyAdapter.getIsSelected().get(i)){

    MyAdapter.getIsSelected().put(i,false);

    checkNum--;

    }else{

    MyAdapter.getIsSelected().put(i,true);

    checkNum++;

    }

    }

    datachanged();

    }

    });

    break;

    caseR.id.bt_deselectall:

    //取消选择

    mBtDeselectall.setOnClickListener(newView.OnClickListener() {

    @Override

    public voidonClick(View view) {

    for(inti =0; i

    if(MyAdapter.getIsSelected().get(i)){

    MyAdapter.getIsSelected().put(i,false);

    checkNum--;

    }

    }

    datachanged();

    }

    });

    break;

    }

    mLv.setOnItemClickListener(newAdapterView.OnItemClickListener() {

    @Override

    public voidonItemClick(AdapterView adapterView, View view,inti,longl) {

    // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤

    MyAdapter.ViewHolder holder= (MyAdapter.ViewHolder) view.getTag();

    // 改变CheckBox的状态

    holder.cb.toggle();

    //将checkBox的状态记录下来

    MyAdapter.getIsSelected().put(i, holder.cb.isChecked());

    //调整选中的条目

    if(holder.cb.isChecked()){

    checkNum++;

    }else{

    checkNum--;

    }

    // 用TextView显示

    //  tv_show.setText("已选中" + checkNum + "项");

    }

    });

    }

    private voiddatachanged() {

    // 通知listView刷新

    mAdapter.notifyDataSetChanged();

    // TextView显示最新的选中数目

    // tv_show.setText("已选中" + checkNum + "项");

    }

    }

    接下来是Adapter的书写了

    packagesmile.itheima.com.listviewitemallcheck;

    importandroid.content.Context;

    importandroid.view.LayoutInflater;

    importandroid.view.View;

    importandroid.view.ViewGroup;

    importandroid.widget.BaseAdapter;

    importandroid.widget.CheckBox;

    importandroid.widget.TextView;

    importjava.util.ArrayList;

    importjava.util.HashMap;

    /**

    * Created by albus on 2017/3/10.

    */

    public classMyAdapterextendsBaseAdapter {

    // 填充数据的list

    privateArrayListmList;

    // 用来控制CheckBox的选中状况

    private staticHashMapisSelected;

    // 上下文

    privateContextmContext;

    // 用来导入布局

    privateLayoutInflaterinflater=null;

    publicMyAdapter(ArrayList list, Context context) {

    mList= list;

    mContext= context;

    inflater= LayoutInflater.from(context);

    isSelected=newHashMap();

    // 初始化数据

    initDate();

    }

    // 初始化isSelected的数据

    private voidinitDate() {

    //初始化所有Item的选中状态        初始状态全部为false  未选中状态

    for(inti =0; i

    getIsSelected().put(i,false);

    }

    }

    @Override

    public intgetCount() {

    returnmList.size();

    }

    @Override

    publicObject getItem(inti) {

    returnmList.get(i);

    }

    @Override

    public longgetItemId(inti) {

    returni;

    }

    @Override

    publicView getView(inti, View convertView, ViewGroup viewGroup) {

    ViewHolder holder =null;

    if(convertView ==null) {

    // 获得ViewHolder对象

    holder =newViewHolder();

    // 导入布局并赋值给convertview

    convertView =inflater.inflate(R.layout.listview_item,null);

    holder.tv= (TextView) convertView.findViewById(R.id.item_tv);

    holder.cb= (CheckBox) convertView.findViewById(R.id.item_cb);

    // 为view设置标签

    convertView.setTag(holder);

    }else{

    // 取出holder

    holder = (ViewHolder) convertView.getTag();

    }

    // 设置list中TextView的显示

    holder.tv.setText(mList.get(i));

    // 根据isSelected来设置checkbox的选中状况

    holder.cb.setChecked(getIsSelected().get(i));

    returnconvertView;

    }

    public staticHashMap getIsSelected() {

    returnisSelected;

    }

    public static voidsetIsSelected(HashMap isSelected) {

    MyAdapter.isSelected= isSelected;

    }

    public static classViewHolder {

    TextViewtv;

    CheckBoxcb;

    }

    }

    有不懂的欢迎加QQ740894123  一起交流学习  本人正在向乞討在路上奔走中

    相关文章

      网友评论

        本文标题:安卓从入门到乞討 List View一键点击Item全选中的实现

        本文链接:https://www.haomeiwen.com/subject/wratnttx.html