此贴没有大量水帖文字,读者请放心,代码简单明了,轻松入门,高手勿喷!
废话不多说直接看效果,附完整代码:
MyAdapter适配器
public class MyAdapter extends BaseAdapter { // 数据源 ArrayList<Bean> lists; // 上下文 Context context; // 创建接口 private getItemPosition getitemPosition; public interface getItemPosition{ void getitemPosition(int position); } public void getitemPosition(getItemPosition position){ this.getitemPosition = position; } public MyAdapter(ArrayList<Bean> lists, Context context) { this.lists = lists; this.context = context; } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int i) { return lists.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { MyHolder holder; if (view == null){ view = LayoutInflater.from(context).inflate(R.layout.item,null); holder = new MyHolder(); holder.tv = view.findViewById(R.id.textView); holder.cb = view.findViewById(R.id.item_check); view.setTag(holder); }else{ holder = (MyHolder) view.getTag(); } holder.tv.setText(lists.get(i).name); holder.cb.setChecked(lists.get(i).isno); holder.cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 将点击的条目 position传入接口中 在Main中调用 getitemPosition.getitemPosition(i); } }); return view; } class MyHolder{ TextView tv; CheckBox cb; } }
MainActivity
public class MainActivity extends AppCompatActivity { ListView listView; // 数据 Button btn_del; // 删除 CheckBox cb; // bottom的全选框 MyAdapter adapter; // 适配器 ArrayList<Bean> lists; // 模拟数据集合 // 用于选中条目的数量 private int flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); // 初始化数据 initData(); } private void initData() { for (int i = 0; i <10 ; i++) { lists.add(new Bean("测试"+i,false)); } adapter = new MyAdapter(lists,MainActivity.this); listView.setAdapter(adapter); // 接口回调传position值 adapter.getitemPosition(new MyAdapter.getItemPosition() { @Override public void getitemPosition(int position) { lists.get(position).isno = ! lists.get(position).isno; flag = 0; for (int i = 0 ; i < lists.size();i++){ if (lists.get(i).isno){ flag++; } } // 如果条目全部选中的时候 全选框为 选中状态 cb.setChecked(flag == lists.size()); } }); // 全选框的监听事件 cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (cb.isChecked()){ for (int i = 0; i < lists.size(); i++) { lists.get(i).isno = true; } }else{ for (int i = 0; i < lists.size(); i++) { lists.get(i).isno = false; } } adapter.notifyDataSetChanged(); } }); // 删除按钮的监听事件 btn_del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 将选中的条目 存入到一个新的集合 ArrayList<Bean> del_item = new ArrayList<>(); // 遍历判断是否选中 for (int i = 0; i < lists.size(); i++) { if(lists.get(i).isno){ del_item.add(lists.get(i)); } } // 根据选中的条目进行全部移除 lists.removeAll(del_item); adapter.notifyDataSetChanged(); } }); } private void init() { listView = (ListView) findViewById(R.id.listView); btn_del = (Button) findViewById(R.id.btn_del); cb = (CheckBox) findViewById(R.id.checkAll); lists = new ArrayList<>(); } }
Bean类
public class Bean { public String name; public boolean isno; public Bean(String name, boolean isno) { this.name = name; this.isno = isno; } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.www.checkdemo1106.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/listView"> </ListView> <CheckBox android:text="全选" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/checkAll"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn_del" android:text="删除"/> </LinearLayout>
如果有需要购物车全选反选商品计价Demo的,请参考http://blog.csdn.net/qq_37199105/article/details/78312797。