在每个列表视图行上设置不同的颜色

时间:2012-01-12 16:04:06

标签: android listview

我已经看到了相关的答案,我不知道哪一个适合我。 我有一个listView,每行都有一个textview。我想给出一些条件,每行得到不同的颜色。(想象一下,我从DB获取数据,并给出我得到的值,我希望文本设置为不同的颜色)我的代码如下所示:

public class TrailsConditionScreen extends ListActivity {
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        seeTrails();
    }
 private void seeTrails() {
    String[] help=new String[] {"foo","bar"};
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.row,R.id.text1,help);
    setListAdapter(adapter);
 }

} 到目前为止,这段代码只是将它们打印在列表中。

现在我想从db中检索值时,给定值,我会在每一行上设置不同的颜色。想象我的代码在读取第一行时从我想要的表中检索数据,给定数字在listview的第一行设置适当的颜色。然后转到第二个单独的数据库,为列表的第二行设置颜色,依此类推..我已经成功实现了数据库中的读数,但我不知道如何在特定行上设置颜色。在伪代码中它看起来像这样。

 for i=0 to number of lines in db{
   read_data();
   if key_value=0 then color_of_line(i)=red;
  else color_of_line_i)=green;
}

对此有何帮助?

5 个答案:

答案 0 :(得分:7)

您必须创建自定义适配器来处理此问题,而不是使用ArrayAdapter。扩展ArrayAdapter并覆盖 getView 方法。在基于条件的 getView 方法内,您可以更改 textView.setTextColor 上文本的颜色。

要编写自定义适配器,请在此处检查tutorial(6.教程:实现您自己的适配器)。此示例不使用持有者模式,但您应该使用。

答案 1 :(得分:2)

最好的办法是扩展ArrayAdapter并创建自己的类。

getView()方法中,执行条件并设置要绘制的颜色。有很多关于创建自己的适配器的好教程。例如,检查http://www.ezzylearning.com/tutorial.aspx?tid=1763429&q=customizing-android-listview-items-with-custom-arrayadapter

希望它有所帮助!

答案 2 :(得分:2)

为了实现这一目标,您需要使用自定义适配器。既然你提到过,你从数据库中获取数据,我假设你在游标适配器中有信息。因此,一个好的起点是扩展游标适配器。

在新的自定义适配器中,您应该覆盖getView()方法。在那里指定用于列表视图中的每个项目的视图。此外,您还可以在那里设置视图的属性。

根据您的业务逻辑,您应该在getView中设置文本颜色。

这里的教程: http://www.ezzylearning.com/tutorial.aspx?tid=1763429&q=customizing-android-listview-items-with-custom-arrayadapter

答案 3 :(得分:0)

我要做的是为列表视图创建一个CustomAdapter

public class MyCustomAdapter extends BaseAdapter

并在函数中

public View getView(int position, View convertView, ViewGroup parent) 

你有这个职位,你可以改变你想要的任何东西。

如果您通过自定义适配器列表视图搜索谷歌,您将获得一些示例

答案 4 :(得分:-1)

不同颜色对于不同的列表项,是的,只有当项目只是静态时才能实现,但对于动态内容,这很难做到......