在listview上更改一个textview的颜色而不更改其他文本视图

时间:2016-01-27 11:17:17

标签: java android listview colors android-arrayadapter

我需要更改listview backgroundcolor属性的颜色。我可以做到,我改变了颜色,但它改变了我所有的行,颜色相同。我的意思是,我需要一排红色,另一排绿色...我把下面的代码提供帮助:

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, configureList(idRuta, rocodromo, dificultad)) 
          {
              @Override
              public View getView(int position, View convertView, ViewGroup parent) 
              {

                  View view = super.getView(position, convertView, parent);
                  TextView text = (TextView) view.findViewById(android.R.id.text1);

                 for(int i = 0; i < colores.size(); i++)
                 {
                     if(colores.get(i).equals("0"))
                     {
                         text.setBackgroundColor(Color.GREEN);
                     }
                     else if(colores.get(i).equals("1"))
                     {
                         text.setBackgroundColor(Color.RED);
                     }
                     else if(colores.get(i).equals("2"))
                     {
                         text.setBackgroundColor(Color.YELLOW);
                     }
                     else
                     {
                         text.setBackgroundColor(Color.WHITE);
                     }
                 }

                 return view;
              }
          };

第一次,我有#34; colores.get(i)= 1&#34;,所以它将颜色改为RED,但后来我有#34; colores.get(i)= 2&# 34;,所以它将颜色改为黄色。但我需要将第二行改为黄色,而不是第一行,第一行必须为红色。

&#34; colores&#34;我有所有需要更改的颜色列表,按行排序,例如,当&#34; i = 0&#34;时,我将第0行更改为该颜色,但是当&#34; i = 1&#时34;我想只更改第1行,而不是所有行。

任何人都可以帮助我吗?谢谢!

3 个答案:

答案 0 :(得分:0)

试试这个:

if (position % 2 == 1) {
    text.setBackgroundColor(Color.RED);
} else {
    text.setBackgroundColor(Color.YELLOW);  
}

此代码将背景颜色或奇数行设置为YELLOW甚至RED

答案 1 :(得分:0)

我认为你应该考虑到函数getView的“position”参数。我假设你喜欢第一排:绿色,下一个红色,下一个黄色,以及所有其他白色。为此:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, configureList(idRuta, rocodromo, dificultad)) 
      {
          @Override
          public View getView(int position, View convertView, ViewGroup parent) 
          {

              View view = super.getView(position, convertView, parent);
              TextView text = (TextView) view.findViewById(android.R.id.text1);


                 if(colores.get(position).equals("0"))
                 {
                     text.setBackgroundColor(Color.GREEN);
                 }
                 else if(colores.get(position).equals("1"))
                 {
                     text.setBackgroundColor(Color.RED);
                 }
                 else if(colores.get(position).equals("2"))
                 {
                     text.setBackgroundColor(Color.YELLOW);
                 }
                 else
                 {
                     text.setBackgroundColor(Color.WHITE);
                 }


             return view;
          }
      };

在这种方法中,将测试每一行(poistion is index)的颜色。

此处不需要通过颜色数组进行迭代,因为“position”索引应该等于颜色数组的颜色索引。

答案 2 :(得分:0)

删除for循环并按listview项目位置获取颜色。您只需在每个行视图中设置颜色。 改变如下,

auth2.grantOfflineAccess({'redirect_uri' : 'postmessage', 'approval_prompt' : 'force'}).then(onSignIn);