Android 更新ListView中CheckedTextView中的复选框
我是一个noobandroid工作室,这是我开发的第一个应用程序 上下文:我有一个ListView lv,它由使用ListAdapter的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"},
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;
}
}
}
}