android ListView中Checkbox實現單選,全選,全不選功能

來源:互聯網
上載者:User
 @Override protected void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);  setContentView(R.layout.group_list2);    initBottomBar();    listView = (ListView) findViewById(R.id.groupListView);    GroupService service = new GroupService(this);  groupList = service.getGroupList(null);  adapter = new GroupListAdapter(this, groupList);  listView.setAdapter(adapter);    listView.setOnItemClickListener(new OnItemClickListener() {   @Override   public void onItemClick(AdapterView<?> adapterView, View view, int position,     long arg3) {    // TODO Auto-generated method stub    Group group = groupList.get(position);    CheckBox ctb = (CheckBox) view.findViewById(R.id.checkBox);    ctb.toggle();    adapter.selectedMap.put(group.id, ctb.isChecked());    adapter.notifyDataSetChanged();    if(adapter.selectedMap.containsValue(true)){     add2ScanListBtn.setEnabled(true);    }else{     add2ScanListBtn.setEnabled(false);    }   }  });   }  private  void initBottomBar(){  bottomBarView = (LinearLayout) findViewById(R.id.bottomBar);  add2ScanListBtn = (Button) bottomBarView.findViewById(R.id.add2ScanListBtn);  add2ScanListBtn.setEnabled(false);  checkBtn = (Button) bottomBarView.findViewById(R.id.checkBtn);  closeCheckBtn = (Button) bottomBarView.findViewById(R.id.closeCheckBtn);    add2ScanListBtn.setOnClickListener(this);  checkBtn.setOnClickListener(this);  closeCheckBtn.setOnClickListener(this); }
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(0, MENU_EDITOR, 0, "編輯");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case MENU_EDITOR:setCheckBoxVisible(View.VISIBLE);adapter.notifyDataSetChanged();break;default:break;}return super.onOptionsItemSelected(item);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.add2ScanListBtn:GroupService service = new GroupService(this);service.add2ScanList(adapter.selectedMap);for (Group group : groupList) {adapter.selectedMap.put(group.id, false);}setCheckBoxVisible(View.GONE);adapter.notifyDataSetChanged();break;case R.id.checkBtn:CharSequence text = checkBtn.getText();if (getText(R.string.checkAll).equals(text)) {for (int i = 0; i < adapter.getCount(); i++) {Group group = groupList.get(i);adapter.selectedMap.put(group.id, true);}checkBtn.setText(getText(R.string.checkNeither));add2ScanListBtn.setEnabled(true);}else if(getText(R.string.checkNeither).equals(text)){for (int i = 0; i < adapter.getCount(); i++) {Group group = groupList.get(i);adapter.selectedMap.put(group.id, false);}checkBtn.setText(getText(R.string.checkAll));add2ScanListBtn.setEnabled(false);}adapter.notifyDataSetChanged();break;case R.id.closeCheckBtn:setCheckBoxVisible(View.GONE);adapter.notifyDataSetChanged();break;default:break;}}

 

//設定checkbox是否可見private void setCheckBoxVisible(int state){bottomBarView.setVisibility(state);for (int i = 0; i < adapter.getCount(); i++) {Group group = groupList.get(i);adapter.visibleMap.put(group.id, state);}} 

class GroupListAdapter extends BaseAdapter{private Context context;private List<Group> groupList;private Map<Integer, Boolean> selectedMap;//儲存checkbox是否被選中的狀態private Map<Integer, Integer> visibleMap ;public GroupListAdapter(Context context, List<Group> groupList) {this.context = context;this.groupList = groupList;selectedMap = new HashMap<Integer, Boolean>();visibleMap = new HashMap<Integer, Integer>();for (Group group : groupList) {selectedMap.put(group.id, false);visibleMap.put(group.id, View.GONE);}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn groupList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(context).inflate(R.layout.group_list2_item, null);holder.groupNameCTV = (TextView) convertView.findViewById(R.id.groupNameTV);holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}Group group = groupList.get(position);holder.groupNameCTV.setText(group.m_strGroupName);holder.checkBox.setVisibility(visibleMap.get(group.id));holder.checkBox.setChecked(selectedMap.get(group.id));return convertView;}private class ViewHolder{TextView groupNameCTV;CheckBox checkBox;}}

group_list2.xml

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="fill_parent"  android:orientation="vertical">    <LinearLayout android:layout_height="0dip"  android:layout_width="match_parent"  android:layout_weight="1">  <ListView android:id="@+id/groupListView"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:divider="#999999"  android:dividerHeight="1sp"  />  </LinearLayout>    <LinearLayout android:id="@+id/bottomBar"  android:layout_height="wrap_content"  android:layout_width="match_parent" android:gravity="center_horizontal"  android:padding="5dip" android:background="@drawable/buttonbar"  android:visibility="gone">  <Button android:id="@+id/add2ScanListBtn"    android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:text="@string/add2ScanList"/>    <Button android:id="@+id/checkBtn"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/checkAll" /><Button android:id="@+id/closeCheckBtn"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/cancel" />  </LinearLayout></LinearLayout>

group_list2_item.xml

 

<?xml version="1.0" encoding="utf-8"?><RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="horizontal"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"  >    <TextView android:id="@+id/groupNameTV"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:textSize="20dip"  android:layout_alignParentLeft="true"  android:textColor="@android:color/white"  android:layout_marginTop="12dip"  android:layout_marginLeft="5dip"  android:paddingBottom="12dip"  /><CheckBox android:id="@+id/checkBox"android:layout_width="wrap_content"    android:layout_height="wrap_content"  android:layout_alignParentRight="true"  android:layout_marginRight="5dip"  android:clickable="false"  android:focusable="false"  android:focusableInTouchMode="false"    />  </RelativeLayout>

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.