CheckedTextView中的Update复选框位于ListView中

时间:2017-10-01 04:07:17

标签: android listview checkbox

我是一个菜鸟工作室,这是我开发的第一个应用程序。

上下文:我有一个ListView lv,它使用ListAdapter填充CheckedTextViews。

ListAdapter adapter = new SimpleAdapter(
                c, manageTrackers.trackers,
                R.layout.list_item, new String[]{"id", "mobile", "status"},
                new int[]{R.id.trackerID, R.id.trackerMobile, R.id.trackerStatus});

lv.setAdapter(adapter);

我为lv设置了OnItemClickListener,如下所示,它按预期检查并取消选中复选框。当我在活动之间导航时,我希望检查保持持久性,因此我将一个密钥存储在selectedTrackers数组列表中。

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);
            }

        }
    });

当我使用列表视图导航回活动时,我调用了一个函数getSelectedTrackers,我想根据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;
            }
        }

    }

}

问题:我已确认该函数找到了正确的复选框,但在调用setChecked()后,没有任何复选框显示为已选中。我已经搜索了SO并尝试使无效,刷新可绘制状态,notifyDataSetChanged,我似乎无法弄清楚如何让它工作。最好的方法是什么?任何帮助表示赞赏!

0 个答案:

没有答案