【问题标题】:Android Custom list adapter- Color for each list entryAndroid 自定义列表适配器 - 每个列表条目的颜色
【发布时间】:2013-07-01 06:13:17
【问题描述】:

我在 UI 中有一个 Android 传感器列表。我的整个应用程序是一个服务,每个传感器都可以通过发送 HTTP Post 请求来打开/关闭。例如,http://IPaddress:port/accelerometer/on 将打开加速度计。我的要求是在传感器打开时将列表条目的颜色更改为红色,并在传感器关闭时将其变为黑色。可以同时打开多个传感器。我使用以下代码,但请告诉我如何更改列表中的多个传感器条目?即,如果打开了 3 个传感器,则列表中所有条目的颜色都应变为红色。提前致谢!

public View getView (int position, View convertView, ViewGroup parent)
{
View rowView = convertView;
TextViewHolder holder = null;   
if(rowView == null)
{   
LayoutInflater inflater = LayoutInflater.from(context);
rowView = inflater.inflate(layoutResourceId, parent, false);
holder = new TextViewHolder(); 
holder.txt = (TextView)rowView.findViewById(R.id.txtTitle);
rowView.setTag(holder);  
}
else{       
    holder = (TextViewHolder) rowView.getTag();     
}
if(values[position].contains(sensor) && state[position])
{
((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.RED);
((TextView)rowView.findViewById(R.id.txtTitle)).setText(values[position]);  
}  
else if(values[position].contains(sensor) && (!state[position]))
   {  ((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.BLACK);
     ((TextView)rowView.findViewById(R.id.txtTitle)).setText(values[position]);
}
else
{       
holder.txt.setTextColor(Color.BLACK);
holder.txt.setText(values[position]);    
}  
return rowView;
}

更新:我的列表中有 17 个传感器。但是有 2 个用于重力、线性加速度等的传感器。getView() 方法仅对前 10 个条目进行迭代并重复这些。

【问题讨论】:

    标签: android listadapter android-sensors custom-lists


    【解决方案1】:

    只需检查一下:

    if(position %2 ==0){
    ((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.RED);
    }
    else{
    ((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.BLACK);
    }
    

    【讨论】:

    • 列表应该动态改变颜色
    【解决方案2】:

    您正在再次初始化您的文本视图以设置文本并设置另一个实例的颜色

    你必须使用相同的文本视图实例来设置文本和设置颜色

    public View getView (int position, View convertView, ViewGroup parent)
    {
    View rowView = convertView;
    TextViewHolder holder = null;   
    if(rowView == null)
    {   
    LayoutInflater inflater = LayoutInflater.from(context);
    rowView = inflater.inflate(layoutResourceId, parent, false);
    holder = new TextViewHolder(); 
    holder.txt = (TextView)rowView.findViewById(R.id.txtTitle);
    rowView.setTag(holder);  
    }
    else{       
        holder = (TextViewHolder) rowView.getTag();     
    }
    if(values[position].contains(sensor) && state[position])
    {
    holder.txt.setTextColor(Color.RED);
    holder.txt.setText(values[position]);  
    }  
    else if(values[position].contains(sensor) && (!state[position]))
       {  holder.txt.setTextColor(Color.BLACK);
         holder.txt.setText(values[position]);
    }
    else
    {       
    holder.txt.setTextColor(Color.BLACK);
    holder.txt.setText(values[position]);    
    }  
       return rowView;
        }
    

    试试这个编辑过的代码,希望对你有帮助

    【讨论】:

      【解决方案3】:

      您可以创建不同的可绘制对象和形状,并在您的自定义适配器中选择正确的: 例如: 圆角

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android" >    
      <solid android:color="#00FF00"/>
      <corners android:radius="5dp" />    
      <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />
      <stroke android:width="3dp" android:color="#00CC00"/>
      

      然后

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android" >
      <item android:drawable="@drawable/rounded_corner" android:state_enabled="true"/>
      <item android:drawable="@drawable/rounded_corner" android:state_pressed="true"/>
      <item android:drawable="@drawable/rounded_corner" android:state_focused="true"/>
      

      最后在您的自定义适配器中:

       v = inflater.inflate(R.layout.row_layout, null);
          // Now we can fill the layout with the right values
          TextView tv = (TextView) v.findViewById(R.id.name);
          holder.planetNameView = tv;
          v.setTag(holder);
          v.setBackgroundResource(R.drawable.rounded_corner);
      

      当然,在您的情况下,您可以根据位置选择正确的背景。 如果您想了解更多信息,请查看我的博客here

      【讨论】:

        猜你喜欢
        • 2011-02-14
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多