我是一个菜鸟工作室,这是我开发的第一个应用程序。
上下文:我有一个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,我似乎无法弄清楚如何让它工作。最好的方法是什么?任何帮助表示赞赏!