我有一个带有ListView的应用程序,其中包含ListFragment中的自定义项目。该应用程序的目的是一个清单,其中包含更改背景颜色的任务,并在选中时添加复选标记。
现在,当选择任务时,它会将此信息传递给连接的SQLite-db并重新加载适配器。使用if语句检查任务是否已完成,如果是,则添加复选标记并更改背景。 这一切都运行良好,但当我有更多的任务比屏幕可以保持它重新加载适配器,标准行为时跳转到顶部。
我一直在尝试使用此页面上的信息:Android: Is it possible to refresh just one item in a listview? 这些信息非常有用:
View v = listViewItems.getChildAt(position -
listViewItems.getFirstVisiblePosition());
v.setBackgroundColor(Color.GREEN);
我自己的实现是:
private void updateView(int index){
View v = getListView().getChildAt(index -
getListView().getFirstVisiblePosition());
if(v == null)
return;
v.setBackgroundColor(getResources().getColor(R.color.finished_bg));
IconTextView itv = (IconTextView) v.findViewById(R.id.task_item_icontextview);
itv.setVisibility(View.VISIBLE);
}
这就是它变得棘手的地方。
1:它改变了背景,非常好,但是当我向上或向下滚动并且项目离开屏幕然后重新进入背景时又恢复了它的标准颜色。 如何确保颜色保持这种状态?
2:根本没有显示复选标记。我做错了参考吗?是否有可能以这种方式改变属性?
答案 0 :(得分:1)
答案 1 :(得分:0)
没关系,我解决了!
我停止使用updateView方法并在正确的位置实现了以下代码:
adapter.clear();
adapter.addAll(tasksList);
adapter.notifyDataSetChanged();
适配器是我的自定义适配器的名称,taskList是ArrayList,其信息应放在我的ListView项目中。
我之前尝试过这样做,但是犯了一点错误。