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; } }}