samedi 30 septembre 2017

Update checkbox in CheckedTextView which is inside a ListView

I am a noob android studio and this is my first app I am developing.

Context: I have a ListView lv which is populated with CheckedTextViews using a SimpleAdapter. I have set up the OnItemClickListener for lv as shown below which checks and unchecks the check boxes as expected. I want the checks to remain persistent when I navigate between activities, so I am storing a key in the selectedTrackers array list.

lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
        {
            CheckedTextView ctv = (CheckedTextView) view.findViewById(R.id.trackerID);

            HashMap s = (HashMap)lv.getItemAtPosition(i);
            String mob = (String)s.get("mobile");

            //checked and pressed
            if (ctv.isChecked())
            {
                ctv.setChecked(false);
                for (int j = 0; j < selectedTrackers.size(); j++)
                {
                    if (selectedTrackers.get(j) == mob)
                    {
                        selectedTrackers.remove(j);
                        break;
                    }
                }

            }
            //not checked
            else
            {
                ctv.setChecked(true);
                selectedTrackers.add(mob);
            }

        }
    });

When I navigate back to the activity with the list view, I call a function getSelectedTrackers which I want to select the saved checkboxes based on the key in selectedTrackers

public static void getSelectedTrackers()
{
    if (basicSettings.selectedTrackers.size() == 0) return;
    for (int i = 0; i < trackers.size(); i++)
    {
        HashMap s = trackers.get(i);
        String mob = (String)s.get("mobile");
        for (int j = 0; j < basicSettings.selectedTrackers.size(); j++)
        {
            if (basicSettings.selectedTrackers.get(j).equals(mob))
            {
                View v = getViewByPosition(i, lv);
                CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.trackerID);

                ctv.setChecked(true);
                //******************************
                //some call to update the view HERE
                //******************************


                break;
            }
        }

    }

}

Question: I have confirmed that the function finds the correct checkbox, but none of the check boxes are displayed as being selected after calling setChecked(). I have scoured SO and tried invalidating, refreshing drawable state, notifyDataSetChanged, and I can't seem to figure it out how to get it to work. What's the best way to do this? Any help is appreciated!




Aucun commentaire:

Enregistrer un commentaire