Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更新ListView中CheckedTextView中的复选框_Android_Listview_Checkbox - Fatal编程技术网

Android 更新ListView中CheckedTextView中的复选框

Android 更新ListView中CheckedTextView中的复选框,android,listview,checkbox,Android,Listview,Checkbox,我是一个noobandroid工作室,这是我开发的第一个应用程序 上下文:我有一个ListView lv,它由使用ListAdapter的CheckedTextView填充 ListAdapter adapter = new SimpleAdapter( c, manageTrackers.trackers, R.layout.list_item, new String[]{"id", "mobile", "status"},

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

上下文:我有一个ListView lv,它由使用ListAdapter的CheckedTextView填充

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设置了MClickListener,如下所示,它按预期选中和取消选中复选框。我希望在活动之间导航时检查保持持久性,因此我将在
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);
            }

        }
    });

问题:我已确认该函数找到了正确的复选框,但调用setChecked()后,没有一个复选框显示为选中。我已经搜索了这么多,并尝试了无效、刷新可绘制状态、notifyDataSetChanged,但我似乎不知道如何让它工作。最好的方法是什么?感谢您的帮助

@pskink变量
trackers
是一个
数组列表
,用于在另一个类中创建适配器。键
mobile
实际上链接到一个手机号码,我用它来记录选中的复选框。还有更多的键,即
trackerID
status
@pskink我的适配器实际上是
ListAdapter
(参见编辑)类型,这样做还可以吗?这个想法似乎可行,但有没有更简单的方法来处理我当前的代码?@pskink变量
trackers
是一个
ArrayList
,用于在另一个类中创建适配器。键
mobile
实际上链接到一个手机号码,我用它来记录选中的复选框。还有更多的键,即
trackerID
status
@pskink我的适配器实际上是
ListAdapter
(参见编辑)类型,这样做还可以吗?这个想法似乎是可行的,但我现在的代码有没有更简单的方法?
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;
            }
        }

    }

}