本文是使用listView+checkBox来实现全选、单选。
全选:点击全选按钮将所有item进行选中。
单选:点击任意一个ite进行选择,每次点击都会将其他item的选中状态置为false。
首先是布局代码:
<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"
>
<Button
android:id="@+id/btn_all"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="全 选"
android:textColor="@android:color/black"
android:textSize="16sp" />
<ListView
android:id="@+id/lv_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_all">
</ListView>
</RelativeLayout>
ListCheckBoxActivity :
public class ListCheckBoxActivity extends Activity {
ListView lv_listView;
Button btn_all;
List<IsSeclect> dataIsSeclect = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checkbox);
lv_listView = (ListView) findViewById(R.id.lv_listView);
btn_all = (Button) findViewById(R.id.btn_all);
initData();
initAdapter();
}
/**
* 初始化数据
*/
private void initData() {
dataIsSeclect = new ArrayList<IsSeclect>();
//使用for循环保存一些假数据
for (int i = 0; i < 10; i++) {
IsSeclect isSeclect = new IsSeclect();
isSeclect.setSeclect(false);
dataIsSeclect.add(isSeclect);
}
}
/**
* listView的adapter
*/
private void initAdapter() {
final MyAdapter myAdapter = new MyAdapter(this);
myAdapter.setDatas(dataIsSeclect);
lv_listView.setAdapter(myAdapter);
lv_listView.setOnItemClickListener(new OnItemClickListener() {
int currentNum = -1;
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
for (IsSeclect isSeclect : dataIsSeclect) {
isSeclect.setSeclect(false);
}
if (currentNum == -1) { // 选中
dataIsSeclect.get(position).setSeclect(true);
currentNum = position;
} else if (currentNum == position) { // 同一个item选中变未选中
for (IsSeclect isSeclect : dataIsSeclect) {
isSeclect.setSeclect(false);
}
currentNum = -1;
} else if (currentNum != position) { // 不是同一个item选中当前的,去除上一个选中的
for (IsSeclect isSeclect : dataIsSeclect) {
isSeclect.setSeclect(false);
}
dataIsSeclect.get(position).setSeclect(true);
currentNum = position;
}
myAdapter.notifyDataSetChanged();
}
});
// 全选
btn_all.setOnClickListener(new OnClickListener() {
int curNum = -1;
@Override
public void onClick(View arg0) {
if (curNum == -1) {
for (IsSeclect isSeclect : dataIsSeclect) {
isSeclect.setSeclect(true);
}
curNum = 0;
} else if (curNum == 0) {
for (IsSeclect isSeclect : dataIsSeclect) {
isSeclect.setSeclect(false);
}
curNum = -1;
}
myAdapter.notifyDataSetChanged();
}
});
}
}
IsSeclect :
/**
* listView选择的checkBook实体类
* @author m.xang
*
*/
public class IsSeclect {
boolean isSeclect;
public IsSeclect() {
}
public void setSeclect(boolean isSeclect) {
this.isSeclect = isSeclect;
}
public boolean getSeclect() {
return isSeclect;
}
}
贴张效果图: