How to mark all the checkboxes of a Listview through another Checkbox

0

I have the following xml:

<TextView
    android:layout_height="50dp"
    android:layout_width="match_parent"
    style="@style/AlertDialog_TPV_family_Style_Title"
    android:gravity="center"
    android:layout_marginBottom="20dp"
    android:text="Modificación Articulos" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Seleccione Articulos vendibles"
    android:textSize="20dp"
    android:textColor="@color/black"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:id="@+id/mTodos"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Marcar todos"
        android:textColor="@color/black"
        android:textAlignment="center"/>

</LinearLayout>

<Spinner
    android:layout_width="match_parent"
    android:layout_height="42dp"
    android:id="@+id/spinnerfamilias"></Spinner>



<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listaArticulos"
    android:divider="@android:color/transparent"
    android:dividerPadding="8dp"
    android:scrollbarStyle="outsideOverlay"
    android:paddingBottom="8dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="15dp"></ListView>

It is composed of several elements, including a ListView and a Checkbox, well what I want to do is that by checking that checkbox I check all the checkboxes that appear in the ListView, I leave the xml of the ListView item:

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/checkbox"
    android:gravity="center_vertical"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/articulo"/>

Very simple, a textview which I associate values of a list and a checkbox, all this is executed in a dialog which I have created:

public class DialogGArticulos extends android.support.v4.app.DialogFragment {

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View parentView = inflater.inflate(R.layout.dialog_articulos, null);
    final ArrayList[] listaart = new ArrayList[1];


    final Spinner spinner = (Spinner) parentView.findViewById(R.id.spinnerfamilias);
    final ListView listView = (ListView) parentView.findViewById(R.id.listaArticulos);
    CheckBox checkBox = (CheckBox) parentView.findViewById(R.id.checkbox);



    builder.setView(parentView);

    //SPINNER
    ArrayList listaFamilias = new ArrayList(Utility.dbHelper.getAllFamiliesAndGroups());
    Log.i("DialogDArticulos","listaFamilias "+ listaFamilias);
    ArrayAdapter adapterSpinner = new ArrayAdapter(getActivity(),R.layout.spinner_item,Utility.dbHelper.getAllFamiliesAndGroups());
    adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapterSpinner);
    Log.i("DialogArticulos","spinner.getSelectedItem().toString() "+ spinner.getSelectedItem().toString());
    spinner.setSelection(0);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            listaart[0] = new ArrayList(Utility.dbHelper.getArticlesByFam(spinner.getSelectedItem().toString()));
            listView.setAdapter(new GArticleAdapter(getActivity(), listaart[0]));
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


    //LISTVIEW
    listaart[0] = new ArrayList(Utility.dbHelper.getArticlesByFam(spinner.getSelectedItem().toString()));
    //listaart = Utility.dbHelper.getArticlesByFam(spinner.getSelectedItem().toString());
    Log.i("DialogArticulos","gArt by fam "+ listaart[0]);
    listView.setAdapter(new GArticleAdapter(getActivity(), listaart[0]));


    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            for (int i = 0; i<listaart.length;i++){
                //Bucle que recoree los elementos que se muestran en la lista con la intencion de marcarlos todos con algun metodo.
            }
        }
    });

return builder.create();
}

}

I also leave here my adapter for you to take a look, it is a custom adapter:

public class GArticleAdapter extends BaseAdapter {

Context context;
ArrayList listaDatos;


public GArticleAdapter(Context context, ArrayList listaDatos){
    this.context = context;
    this.listaDatos = listaDatos;
}

@Override
public int getCount() {
    return listaDatos.size();
}

@Override
public Object getItem(int position) {
    return listaDatos.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView == null){
        convertView = LayoutInflater.from(context).inflate(R.layout.listview_item_articulos, parent,false);
    }
    TextView articulo = (TextView) convertView.findViewById(R.id.articulo);
    CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
    articulo.setText(listaDatos.get(position).toString());

    return convertView;
}

}

Does anyone know how to mark all the checkboxes in the ListView by checking the checkbox that is outside this ListView ??

Thank you and greetings.

    
asked by J. Burrueco 21.12.2018 в 11:25
source

1 answer

0

Put the check box button to listen to an action on click , and when its value changes, cojes the ArrayList that you pass per parameter to the adapter you use to populate the ListView and you loop it for changing all the values of its check box and when you exit the loop you call the method notifyDataSetChanged() of your adapter .

    
answered by 21.12.2018 / 12:34
source