关于ListView的item中含有checkbox,并判断选中的数目

来源:互联网 发布:mac 双系统 win10 编辑:程序博客网 时间:2024/05/20 07:59

1.废话不多说,直接上代码。

package com.example.testchecxbox;


import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
 * ListView中含有checkbox,并且判断checkbox选中的个数
 * */
public class MainActivity extends Activity {


private ListView mListView;
private ArrayList<String> groups;
private MulAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView)findViewById(R.id.listview);
groups = new ArrayList<String>();
//以下是要加载的数据源
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
groups.add("88");
groups.add("99");
groups.add("00");
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
groups.add("88");
groups.add("99");
groups.add("00");


AdapterView.OnItemClickListener listItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
MulAdapter.ViewHolder viewHolder = (MulAdapter.ViewHolder) view.getTag();
viewHolder.cb.toggle();// 把CheckBox的选中状态改为当前状态的反,gridview确保是单一选中
}
};
adapter = new MulAdapter(this, groups);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(listItemClickListener);
}


public void submmit(View v){
for (int i = 0; i < adapter.getCheckBoxIDList().size(); i++) {


System.out.println(adapter.getCheckBoxIDList().get(i).toString());


}


Toast.makeText(this, ""+adapter.getCheckBoxIDList().size(), Toast.LENGTH_SHORT).show();
}
public static class MulAdapter extends BaseAdapter{
private Context context;//上下文
private ArrayList<String> list;
private LayoutInflater inflater = null;//导入布局
private boolean[] checks;
public List<String> checkBoxIDList;
public MulAdapter(Context context, ArrayList<String> list) {
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
checks = new boolean[list.size()]; 
checkBoxIDList = new ArrayList<String>();
}
public List<String> getCheckBoxIDList() {
return checkBoxIDList;
}
public void setCheckBoxIDList(List<String> checkBoxIDList) {
this.checkBoxIDList = checkBoxIDList;
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}


@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}


@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
final ViewHolder holder;
if (convertView == null) {//当第一次加载ListView控件时 convertView为空
convertView = inflater.inflate(R.layout.group_item_view, null);//所以当ListView控件没有滑动时都会执行这条语句
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
convertView.setTag(holder);//为view设置标签
} else {//取出holder
holder = (ViewHolder) convertView.getTag();//the Object stored in this view as a tag
}
//设置list的textview显示
holder.tv.setTextColor(Color.WHITE);
holder.tv.setText(list.get(position));
// 根据isSelected来设置checkbox的选中状况
holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {


@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
/*
* b=选中状态
* if b = true 将值添加至checkBoxIDList
* if b = false 将值从checkBoxIDList移除
* */
if (arg1) {


checkBoxIDList.add(holder.cb.getText().toString());


} else {


checkBoxIDList.remove(holder.cb.getText().toString());


}
checks[position] = arg1;
}
});
holder.cb.setChecked(checks[position]);
return convertView;
}
public static class ViewHolder {
TextView tv;
CheckBox cb;
}

}

}

2.布局文件中包含一个水平方向的textView和Checkbox.




阅读全文
0 0
原创粉丝点击