我使用简单的listView与 simple_list_item_multiple_choice
我添加了一个复选框,并在其选中的事件中希望所有列表项都被选中,并取消选中所有未选中的项目。
这是代码..
CheckBox select_all = (CheckBox) dialog.findViewById(R.id.chk_all);
arrayAdapter = new ArrayAdapter<String>
(ctx,android.R.layout.simple_list_item_multiple_choice,readyToDownload );
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setAdapter(arrayAdapter);
select_all.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(select_all.isChecked())
{
// check all list items
}
if(!select_all.isChecked())
{
// unselect all list items
}
}
});
答案 0 :(得分:4)
for ( int i=0; i < listview.getChildCount(); i++) {
listview.setItemChecked(i, true);
}
答案 1 :(得分:2)
点击按钮或ListAdapter
,通过onOptionsItemSelected(MenuItem item)
调用方法。
case R.id.selectAll:
listAdapterData.selectAll();
return true;
case R.id.unselectAll:
listAdapterData.unselectAll();
return true;
然后,
public class ListAdapterData extends BaseAdapter {
Context cntxts;
private LayoutInflater mInflater;
private ArrayList objects;
public SparseBooleanArray mSelectedItemsIds;
boolean[] checkBoxState;
boolean IsVisibleMain;
public ListAdapterData(Context context, ArrayList objAll, boolean IsVisible) {
mInflater = LayoutInflater.from(context);
this.cntxts = context;
this.objects = objAll;
this.mSelectedItemsIds = new SparseBooleanArray();
checkBoxState = new boolean[objects.size()];
this.IsVisibleMain = IsVisible;
}
public void selectAll() {
for (int i = 0; i < checkBoxState.length; i++) {
checkBoxState[i] = true;
}
notifyDataSetChanged();
}
public void unselectAll() {
for (int i = 0; i < checkBoxState.length; i++) {
checkBoxState[i] = false;
}
notifyDataSetChanged();
}
}
答案 2 :(得分:0)
我认为你应该在UI线程上运行这个长时间运行的任务。单击OnClickListener中的按钮时:
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.getAdapter().getCount(); i++) {
final int position = i;
mHandler.post(new Runnable() {
@Override
public void run() {
list.setItemChecked(pos, true);
}
});
}
}
}).start();
并在onCreate()中:
this.mHandler = new Handler();
列表视图中的每个项目都应该像CheckableRelativeLayout一样可以实现Checkable接口。
答案 3 :(得分:0)
全选/取消全选/全部反转
活动
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_select_all) {
for(int i=0; i < lvDownload.getChildCount(); i++){
LinearLayout itemLayout = (LinearLayout)lvDownload.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.cbFileDownload);
cb.setChecked(true);
}
return true;
} else if (id == R.id.action_deselect_all) {
for(int i=0; i < lvDownload.getChildCount(); i++){
LinearLayout itemLayout = (LinearLayout)lvDownload.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.cbFileDownload);
cb.setChecked(false);
}
return true;
} else if (id == R.id.action_inverse_all) {
for(int i=0; i < lvDownload.getChildCount(); i++){
LinearLayout itemLayout = (LinearLayout)lvDownload.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.cbFileDownload);
cb.setChecked(!cb.isChecked());
}
return true;
}
return super.onOptionsItemSelected(item);
}
lvDownload - ListView ID LinearLayout或RelativeLayout - 请参阅项目中的root cbFileDownload - CheckBox ID在你的项目中看到
菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="ua.com.pultok.AboutActivity">
<item
android:id="@+id/action_select_all"
android:orderInCategory="100"
android:title="@string/action_select_all"
app:showAsAction="never" />
<item
android:id="@+id/action_deselect_all"
android:orderInCategory="100"
android:title="@string/action_deselect_all"
app:showAsAction="never" />
<item
android:id="@+id/action_inverse_all"
android:orderInCategory="100"
android:title="@string/action_inverse_all"
app:showAsAction="never" />
</menu>