安卓中的反选功能

来源:互联网 发布:库卡机器人编程手册 编辑:程序博客网 时间:2024/06/01 09:15
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="horizontal" >    <TextView        android:id="@+id/tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_vertical" />    <LinearLayout        android:id="@+id/line"        android:layout_width="fill_parent"        android:layout_height="50dp"        android:layout_below="@+id/tv"        android:orientation="horizontal" >        <Button            android:id="@+id/bt_selectall"            android:layout_width="80dp"            android:layout_height="fill_parent"            android:text="全选" />    <CheckBox        android:id="@+id/bt_cancleselectall"        android:layout_width="wrap_content"        android:text="反选"        android:layout_height="wrap_content" />        <Button            android:id="@+id/bt_deselectall"            android:layout_width="100dp"            android:layout_height="fill_parent"            android:text="取消选择" />    </LinearLayout>    <ListView        android:id="@+id/lv"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_below="@+id/line" /></RelativeLayout>listviewitem
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="horizontal" >    <TextView        android:id="@+id/item_tv"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_gravity="center_vertical"        android:layout_weight="1" />    <CheckBox        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>MAINACTIVITY
package fengras.com.quanxuanfanxuan;        import android.os.Bundle;        import android.support.v7.app.AppCompatActivity;        import android.util.Log;        import android.view.View;        import android.widget.AdapterView;        import android.widget.Button;        import android.widget.CheckBox;        import android.widget.ListView;        import android.widget.TextView;        import com.google.gson.Gson;        import com.zhy.http.okhttp.OkHttpUtils;        import com.zhy.http.okhttp.callback.StringCallback;        import java.util.ArrayList;        import java.util.List;        import fengras.com.quanxuanfanxuan.bean.Mynews;        import okhttp3.Call;public class MainActivity extends AppCompatActivity {    private ListView lv;    private MyAdapter mAdapter;    //private ArrayList<String> list;    private List<Mynews.DataBean> list=new ArrayList<>();    private Button bt_selectall;    private CheckBox bt_cancel;    private Button bt_deselectall;    private int checkNum; // 记录选中的条目数量    private TextView tv_show;// 用于显示选中的条目数量    private MyAdapter mm;    String url = "http://www.93.gov.cn/93app/data.do?" + "channelId=" + 0 + "&startNum=" + 1;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.lv);        bt_selectall = (Button) findViewById(R.id.bt_selectall);        bt_cancel = (CheckBox) findViewById(R.id.bt_cancleselectall);        bt_deselectall = (Button) findViewById(R.id.bt_deselectall);        tv_show = (TextView) findViewById(R.id.tv);        initDate();        // 反选按钮的回调接口        bt_cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 遍历list的长度,将已选的设为未选,未选的设为已选                for (int i = 0; i < list.size(); i++) {                    if (MyAdapter.getIsSelected().get(i)) {                        MyAdapter.getIsSelected().put(i, false);                        checkNum--;                    } else {                        MyAdapter.getIsSelected().put(i, true);                        checkNum++;                    }                }                // 刷新listview和TextView的显示                mm.notifyDataSetChanged();            }        });        // 绑定listView的监听器        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                                    long arg3) {                // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤                MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder) arg1.getTag();                // 改变CheckBox的状态                holder.cb.toggle();                // 将CheckBox的选中状况记录下来                MyAdapter.getIsSelected().put(arg2, holder.cb.isChecked());                // 调整选定条目                if (holder.cb.isChecked() == true) {                    checkNum++;                } else {                    checkNum--;                }                // 用TextView显示                tv_show.setText("已选中" + checkNum + "项");            }        });    }    // 初始化数据    private void initDate() {        OkHttpUtils.get().url(url).build().execute(new StringCallback() {            @Override            public void onError(Call call, Exception e, int id) {                Log.e("onError",e.toString());            }            @Override            public void onResponse(String response, int id) {                Gson gson=new Gson();                Mynews mynews = gson.fromJson(response, Mynews.class);                list=mynews.getData();                mm = new MyAdapter(mynews.getData(),MainActivity.this);                lv.setAdapter(mm);            }        });    }}





MyAdapter

package fengras.com.quanxuanfanxuan;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;import java.util.HashMap;import java.util.List;import fengras.com.quanxuanfanxuan.bean.Mynews;/** * Created by Administrator on 2017/4/10. */public class MyAdapter extends BaseAdapter {    // 填充数据的list    private List<Mynews.DataBean> list;    // 用来控制CheckBox的选中状况    private static HashMap<Integer, Boolean> isSelected;    // 上下文    private Context context;    // 构造器    public MyAdapter(List<Mynews.DataBean> list, Context context) {        this.context = context;        this.list = list;        isSelected = new HashMap<Integer, Boolean>();        // 初始化数据        initDate();    }    // 初始化isSelected的数据    private void initDate() {        for (int i = 0; i < list.size(); i++) {            getIsSelected().put(i, false);        }    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null) {            // 获得ViewHolder对象            holder = new ViewHolder();            // 导入布局并赋值给convertview            convertView = View.inflate(context,R.layout.listviewitem, 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(list.get(position).getTITLE());        // 根据isSelected来设置checkbox的选中状况        holder.cb.setChecked(getIsSelected().get(position));        return convertView;    }    public static HashMap<Integer, Boolean> getIsSelected() {        return isSelected;    }    public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {        MyAdapter.isSelected = isSelected;    }    public static class ViewHolder {        TextView tv;        CheckBox cb;    }}






0 0
原创粉丝点击