ListView和CheckBox 的简单使用android
//功能: 有一个文本用于显示 勾选的数目 3个按钮 全选 反选 取消ide
//界面布局有2个xml文件 1 -- activity_main.xml文件
2 -- item_activity.xml文件函数
一、activity_main.xml文件 布局布局
代码this
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >xml
<TextView
android:id="@+id/checkcount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />事件
<LinearLayout
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/checkcount"
android:orientation="horizontal" >get
<Button
android:id="@+id/bt_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全选"
android:onClick="onclickButton"/>it
<Button
android:id="@+id/bt_inverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="反选"
android:onClick="onclickButton" />io
<Button
android:id="@+id/bt_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:onClick="onclickButton"/>
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/bt"
/>
</RelativeLayout>
----------------------
二、item_activity.xml文件 布局
代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants" >
<!-- descendantFocusability 灵异 事件 的有关 -->
<TextView
android:id="@+id/item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="item"
android:gravity="center_vertical"
android:textSize="50sp"/>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
/>
</LinearLayout>
-------------------------
三、MainActivity 类
代码
public class MainActivity extends Activity {
private TextView text;
private ListView listview;
private MyBaseAdapter adapter;
private List<String> list;
private Map<Integer, Boolean> map;
private int checkcount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.text = (TextView) this.findViewById(R.id.checkcount);
this.listview = (ListView) this.findViewById(R.id.listview);
list = new ArrayList<String>();
for(int i = 0;i<10;i++){
list.add("item" + i);
}
map = new HashMap<Integer, Boolean>();
for(int i = 0;i<10;i++){
map.put(i, false);
}
adapter = new MyBaseAdapter(list,map);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//拿到 控件
ViewHolder vh = (ViewHolder) view.getTag();
//toggle -- 选中的 就 反选 -- 不选中的 -- 就选中 开关 函数
vh.checkbox.toggle();
//改变了 状态后 要更新 ListView
adapter.checkbox_map.put(position, vh.checkbox.isChecked());
if(vh.checkbox.isChecked()){
checkcount++;
}else{
checkcount--;
}
text.setText("一共选中了" + checkcount + "项");
}
});
}
//按钮 事件监听
public void onclickButton(View view){
switch(view.getId()){
case R.id.bt_all:
for(int i = 0;i<10;i++){
adapter.checkbox_map.put(i, true);
}
checkcount = list.size();
//更新ListView
data_change();
break;
case R.id.bt_inverse:
for(int i = 0;i<10;i++){
if(adapter.checkbox_map.get(i)){//若是全选中
adapter.checkbox_map.put(i, false);
checkcount--;
}else{
adapter.checkbox_map.put(i, true);
checkcount++;
}
}
data_change();
break;
case R.id.bt_cancel:
for(int i = 0;i<10;i++){
adapter.checkbox_map.put(i, false);
}
checkcount = 0;
data_change();
break;
}
}
private void data_change() {
//让getView在 运行 -- 更新 要改变的 数据 在Listview 里显示
adapter.notifyDataSetChanged();
text.setText("一共选中了" + checkcount + "项");
}
class MyBaseAdapter extends BaseAdapter{
private List<String> list;
private Map<Integer,Boolean> checkbox_map;
public MyBaseAdapter(List<String> list,Map<Integer,Boolean> map) {
this.list = list;
this.checkbox_map = map;
}
@Override
public int getCount() {
return this.list.size();
}
@Override
public Object getItem(int position) {
return this.list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewholder = null;
if(convertView == null){
viewholder = new ViewHolder();
convertView = getLayoutInflater().inflate(
R.layout.item_activity, null);
TextView text_item = (TextView) convertView
.findViewById(R.id.item);
CheckBox checkbox = (CheckBox) convertView
.findViewById(R.id.checkbox);
viewholder.text_item = text_item;
viewholder.checkbox = checkbox;
convertView.setTag(viewholder);
}else{ viewholder = (ViewHolder) convertView.getTag(); } viewholder.text_item.setText(this.list.get(position)); viewholder.checkbox.setChecked(this.checkbox_map.get(position)); return convertView; } class ViewHolder{ private TextView text_item; private CheckBox checkbox; } }}