2014-05-21 40 views
0

我有一个ListView与ListFragment中的自定义项目的应用程序。应用程序的目的是一张清单,其中包含任务,可以更改背景颜色并在选中时添加复选标记。Android:在ListView中更改单个项目的属性

现在的任务时,选择它传递这个信息来连接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

没关系,我解决了!

我停止使用的UpdateView方法和实施了正确的地方下面的代码:

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

适配器是我的自定义适配器的名称和任务列表与所述信息ArrayList中应放置在我的ListView -items。

我以前尝试过这样做,但犯了一个小错误。

1
  1. 使用selector就这一项目的背景压制,选择的重点等
    按照这个简单的教程here
  2. 对号是一个复选框?然后在类上添加一个布尔值,默认为false,并在列表项单击时将其设置为true,或者设置为!布尔值,以便每次点击时都可以动态更改(每次点击返回true/false)。更改适配器,而不是列表视图。
    适配器上,检查是否是布尔值为true,设置checbox托运
+0

感谢您的回答,但我无法找到选择一个选项来选择项目,并保持它的选择,同时还整理等任务。可以尝试接受多种选择,但我不认为这是做这件事的最好方法。 复选标记是IconTextView(Iconify),而不是复选框。 – Daemun

相关问题