选中复选框选择列表视图中的所有项目

时间:2014-07-11 05:26:54

标签: android android-listview android-checkbox

我使用简单的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
                }

            }
                }); 

4 个答案:

答案 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>