Android:更改ListView中单个项目的属性

时间:2014-05-21 09:47:10

标签: android listview

我有一个带有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:根本没有显示复选标记。我做错了参考吗?是否有可能以这种方式改变属性?

2 个答案:

答案 0 :(得分:1)

  1. 使用selector作为按下,选中,聚焦等项目背景 按照这个简单的教程here
  2. 复选标记是一个复选框?然后在类上添加一个布尔值,默认为false,并在列表项单击时将其设置为true,或者设置为!boolean,以便它可以在每次单击时动态更改(每次单击时恢复true / false)。更改适配器,而不是listview。
    在适配器上,检查布尔值是否为true,将checbox设置为选中

答案 1 :(得分:0)

没关系,我解决了!

我停止使用updateView方法并在正确的位置实现了以下代码:

adapter.clear();
adapter.addAll(tasksList);
adapter.notifyDataSetChanged();

适配器是我的自定义适配器的名称,taskList是ArrayList,其信息应放在我的ListView项目中。

我之前尝试过这样做,但是犯了一点错误。