ListView和CheckBox 的簡單使用


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

相關文章
相關標籤/搜索