Question

I have the code below, now I need to keep track of the checkbox state in each gridview item, and fetch that info on a button click to update the information. My button event in the calling activity of imageadapter for a gridview.

    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder;
        ImageView imgView = null;

            if (convertView == null) {

                holder = new ViewHolder(); 
                LayoutInflater ltInflate = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); 
                convertView = ltInflate.inflate(R.layout.griditem, null);

                holder.textview1 = (TextView) convertView.findViewById(R.id.grid_item_alert_date);
                holder.textview2 = (TextView) convertView.findViewById(R.id.grid_item_alert_time);
                holder.textview3 = (TextView) convertView.findViewById(R.id.grid_item_alert_type);

                holder.imageview    = (ImageView) convertView.findViewById(R.id.grid_item_image);
                holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox_ack);
                convertView.setTag(holder);

            }
            else
            {   
                holder = (ViewHolder) convertView.getTag();
            }

            holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                  @Override
                  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
                {

                    //Accessing or saving position to a List doesn't work here

                    //How to add ? info to a list here...

                }

                  } });

            holder.textview1.setText("Text 1 ");
            holder.textview2.setText("Text 2 ");
            holder.textview3.setText("Text 3 ");
            holder.checkbox.setChecked(false);
            holder.imageview.setImageBitmap(bitmap);
            holder.id = position;

            return convertView;
    }

In the activity:

private OnClickListener UpdateButtonListener =
            new OnClickListener(){
            public void onClick(View v)
            {
            //CheckBox ckbocx = (CheckBox) findViewById(R.id.checkbox_ck);
                        //Need info on all the checkboxes for each gridview item

    };

Any clues, hints are more than welcome.

Was it helpful?

Solution

Deal with integer array to store the state of your checkboxes when it checked/unchecked, Initially fill the array with 0 values which indicate unchecked of your checkboxes like this.

int[] checkStates;
 checkStates = new int[datalist.length()];
   for (int i = 0; i < datalist.length(); i++) {
        checkStates[i] = 0;
   }

Now handle checkboxes click event to get perfect position. use settag & get gettag and inside click event when box get selected change the value of particular position to 1 from 0.

Like this#

  checkbox.setTag(position);



    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            pos = (Integer) buttonView.getTag();
            // checkStates[pos] = 1;
            // pos = (Integer) v.getTag();

            if (!buttonView.isChecked()) {
                boxState[pos] = 0;
            } else {
                boxState[pos] = 1;
            }
            notifyDataSetChanged();
        }
    });

and inside getview method handle your check/uncheck state this way..

if (checkStates[position] == 0) {
            checkbox.setChecked(false); // set unchecked"
        } else {
            checkbox.setChecked(true); // set checked"
        }

This way you will get the info of checkboxes which are selected, further handle your button click event, and get the int array which filled while check and uncheck.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top