listview中CheckBox的监听回调

来源:互联网 发布:多传感器数据融合改进 编辑:程序博客网 时间:2024/05/17 09:19

调用:

public class Messages extends BaseAvtivity implements View.OnClickListener {    private ListView messages;    private ArrayList<messageData> list;    private listAdapter_message  mAdapter;    private LinearLayout ll_message_delete;    private TextView message_delete;    private int selected_num;    private int[] selected;    private TitleBuilder titleBuilder;    private View title01,title02;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_messages);        title01 = findViewById(R.id.message_title1);        title02 = findViewById(R.id.message_title2);        setBar();        init();        mAdapter = new listAdapter_message(getApplicationContext(),list);        messages.setAdapter(mAdapter);        mAdapter.setChecked(new listAdapter_message.onChecked() {            @Override            public void CheckedChanged(int position,boolean isChecked) {                    if (isChecked){                        if (selected_num < mAdapter.getCount()){                            selected_num++;                        }                        selected[position] = 101;                        if (selected_num == mAdapter.getCount()){                            titleBuilder.setRightText("全不选");                            titleBuilder.setTitle("已选择"+mAdapter.getCount()+"个");                            mAdapter.allcheck = true;                        }else {                            titleBuilder.setTitle("已选择"+selected_num+"个");                        }                    }else {                        if (selected_num > 0){                            selected_num--;                        }                        selected[position] = 0;                        titleBuilder.setRightText("全选");                        if (selected_num == 0){                            titleBuilder.setTitle("选择消息");                        }else {                            titleBuilder.setTitle("已选择"+selected_num+"个");                        }                        mAdapter.allcheck = false;                    }            }        });        messages.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                //点击Item设置check的点击                CheckBox checkBox = (CheckBox) view.findViewById(R.id.message_checkbox);                if (checkBox.isChecked()){                    checkBox.setChecked(false);                }else {                    checkBox.setChecked(true);                }            }        });    }    private void init(){        messages = (ListView) findViewById(R.id.messages_listview);        ll_message_delete = (LinearLayout) findViewById(R.id.ll_message_delete);        message_delete = (TextView) findViewById(R.id.message_delete);        list = new ArrayList<messageData>();        list.add(new messageData("新消息1","2016/10/27 10:25:16"));        list.add(new messageData("新消息2","2016/10/28 16:35:30"));        list.add(new messageData("新消息3","2016/10/29 09:45:15"));        list.add(new messageData("新消息4","2016/10/29 11:25:38"));        selected = new int[list.size()];        message_delete.setOnClickListener(this);    }    public void setBar() {        new TitleBuilder(title01)                .setTitle("我的消息")                .setLeftImage(R.drawable.back_white)                .setLeftButtonOnListenner(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        finish();                    }                })            .setRightImage(R.drawable.revise)            .setRightButtonOnListenner(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (mAdapter.getCount() == 0){                    ToastUtils.showToast(getApplicationContext(),"无消息",Toast.LENGTH_SHORT);                }else {                    title01.setVisibility(View.GONE);                    title02.setVisibility(View.VISIBLE);                    titleBuilder = new TitleBuilder(title02);                    setTitle();                    ll_message_delete.setVisibility(View.VISIBLE);                    mAdapter.ischeck = true;                    mAdapter.notifyDataSetChanged();                }            }        });    }    private void setTitle(){        titleBuilder.setViewVisibilityGONE()                    .setLeftText("取消")                    .setRightText("全选")                    .setTitle("选择消息")                    .setLeftTextOnListenner(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            title02.setVisibility(View.GONE);                            title01.setVisibility(View.VISIBLE);                            setBar();                            fadedeltetebtn();                        }                    })                    .setRightTextOnListenner(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            if (mAdapter.allcheck){                                titleBuilder.setRightText("全选");                                titleBuilder.setTitle("选择消息");                                mAdapter.allcheck = false;                            }else {                                titleBuilder.setRightText("全不选");                                titleBuilder.setTitle("已选择"+mAdapter.getCount()+"个");                                mAdapter.allcheck = true;                            }                            mAdapter.notifyDataSetChanged();                        }                    });    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.message_delete:                if (selected_num == 0){                    ToastUtils.showToast(getApplicationContext(),"请选择",Toast.LENGTH_SHORT);                    break;                }                if (mAdapter.allcheck){                        mAdapter.deleteAllItem();                    }else {                        mAdapter.deleteItem(selected);                    }                title02.setVisibility(View.GONE);                title01.setVisibility(View.VISIBLE);                setBar();                fadedeltetebtn();                break;            default:                break;        }    }    private void fadedeltetebtn(){        mAdapter.ischeck = false;        mAdapter.allcheck = false;        ll_message_delete.setVisibility(View.GONE);        selected_num = 0;        for (int i = 0;i < selected.length; i++){            selected[i] = 0;        }        mAdapter.notifyDataSetChanged();    }    @Override    protected void onDestroy() {        super.onDestroy();        mAdapter.ischeck = false;        mAdapter.allcheck = false;        ll_message_delete.setVisibility(View.GONE);        mAdapter.notifyDataSetChanged();    }}

adapter:

package com.example.cuboo.mlcircles.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.example.cuboo.mlcircles.DataClass.Data_Map;import com.example.cuboo.mlcircles.DataClass.messageData;import com.example.cuboo.mlcircles.R;import com.example.cuboo.mlcircles.utils.ToastUtils;import java.util.List;/** * Created by cuboo on 2016/10/21. */public class listAdapter_message extends BaseAdapter  {    private Context context;    private List<messageData> list;    public static boolean ischeck;    public  static boolean allcheck;    private onChecked checked;    public void setChecked(onChecked checked) {        this.checked = checked;    }    public listAdapter_message(Context context, List list){        this.context = context;        this.list = list;    }    @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(final int position, View convertView, ViewGroup parent) {        //获得每个item        messageData data_map = (messageData) list.get(position);        ViewHolder viewHolder = null;        if (convertView == null){            //实例化对象            convertView = LayoutInflater.from(context).inflate(R.layout.item_messages,null);            viewHolder = new ViewHolder();            viewHolder.title = (TextView) convertView.findViewById(R.id.message_item_text);            viewHolder.time = (TextView) convertView.findViewById(R.id.message_item_time);            viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.message_checkbox);            convertView.setTag(viewHolder);        }else {            viewHolder = (ViewHolder)convertView.getTag();        }        //设置控件内容        viewHolder.title.setText(data_map.getmTitle());        viewHolder.time.setText(data_map.getmTime());        if (ischeck){            if (allcheck){                viewHolder.checkBox.setChecked(true);            }else {                viewHolder.checkBox.setChecked(false);            }            viewHolder.checkBox.setVisibility(View.VISIBLE);            viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                    if (checked != null){                        //回调方法传参数                        checked.CheckedChanged(position,isChecked);                    }                }            });        }else {            viewHolder.checkBox.setChecked(false);            viewHolder.checkBox.setVisibility(View.GONE);        }        return convertView;    }    public class ViewHolder{        TextView title;        TextView time;        CheckBox checkBox;    }    public static interface onChecked{        public void CheckedChanged(int position,boolean isChecked);    }    //删除单个item    public void deleteItem(int[] index){        for (int i = list.size()-1; i >= 0;i--){            if (index[i] == 101){                list.remove(i);                notifyDataSetChanged();                index[i] = 0;            }        }    }    //删除全部item    public void deleteAllItem(){        list.clear();        notifyDataSetChanged();    }}


xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_messages"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.cuboo.mlcircles.activity.Messages">    <include        android:id="@+id/message_title1"        layout="@layout/title_theme"/>    <include        android:id="@+id/message_title2"        layout="@layout/title_theme"        android:visibility="gone"/>    <ListView        android:id="@+id/messages_listview"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="16dp"        android:layout_marginRight="16dp"        android:layout_weight="1">    </ListView>    <View        android:layout_width="match_parent"        android:layout_height="0.5dp"        android:background="@color/gray01"/>    <LinearLayout        android:id="@+id/ll_message_delete"        android:orientation="vertical"        android:layout_gravity="bottom"        android:layout_width="match_parent"        android:layout_height="48dp"        android:layout_marginRight="16dp"        android:layout_marginLeft="16dp"        android:visibility="gone">        <TextView            android:id="@+id/message_delete"            android:text="删除"            android:layout_gravity="center"            android:gravity="center"            android:layout_weight="1"            android:textSize="16sp"            android:layout_width="wrap_content"            android:layout_height="match_parent" />    </LinearLayout></LinearLayout>





xml:

<?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"    android:layout_marginLeft="16dp"    android:layout_marginRight="16dp">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="56dp"        android:orientation="horizontal">        <TextView            android:id="@+id/message_item_text"            android:gravity="center|left"            android:text="新消息。"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_weight="1"            android:textColor="@color/colorGrey"/>        <TextView            android:id="@+id/message_item_time"            android:gravity="center|right"            android:text="2016/10/28 15:26:30"            android:textColor="@color/gray"            android:textSize="10sp"            android:layout_marginRight="16dp"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_weight="1"/>        <CheckBox            android:id="@+id/message_checkbox"            android:layout_gravity="center"            android:gravity="center"            android:focusable="false"            android:layout_width="24dp"            android:layout_height="24dp"            android:buttonTint="@color/colorGreen"            android:button="@null"            android:background="@drawable/checkbox_selector"            android:visibility="gone"/>    </LinearLayout></LinearLayout>

selector:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_selected="true" android:drawable="@drawable/check01"/>    <item android:state_pressed="true" android:drawable="@drawable/check01"/>    <item android:state_checked="true" android:drawable="@drawable/check01"/>    <item android:state_checked="false" android:drawable="@drawable/check02"/></selector>


0 0