Selecting All Items in a Listview on checkbox select

后端 未结 4 1489
北恋
北恋 2020-12-06 15:46

I am using simple listView with simple_list_item_multiple_choice I have added a checkbox and on its checked event want all list items to get selected

相关标签:
4条回答
  • 2020-12-06 16:11
    for ( int i=0; i < listview.getChildCount(); i++) {
       listview.setItemChecked(i, true);
    }
    
    0 讨论(0)
  • 2020-12-06 16:13

    I think you should run this long-running task off the UI thread. When you click button in 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();    
    

    and in onCreate() :

    this.mHandler = new Handler();
    

    Each item in list view should be Checkable like CheckableRelativeLayout that implements Checkable interface.

    0 讨论(0)
  • 2020-12-06 16:18

    Call a method from a ListAdapter on a button click or onOptionsItemSelected(MenuItem item).

    case  R.id.selectAll:
                    listAdapterData.selectAll();
                    return true;
    
    case  R.id.unselectAll:
                    listAdapterData.unselectAll();
                     return true;
    

    And then,

    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();
        }
    }
    
    0 讨论(0)
  • 2020-12-06 16:25

    Select all / Deselect all / Inverse all

    For Activity

    @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 or RelativeLayout - see root in your item cbFileDownload - CheckBox ID see in your item

    And Menu:

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

    0 讨论(0)
提交回复
热议问题