Android自定义列表适配器-每个列表条目的颜色
我在UI中有一个Android传感器列表。我的整个应用程序都是一个服务,每个传感器都可以通过发送HTTP Post请求来打开/关闭。例如,http://IPaddress:port/accelerator/on将打开加速计。我的要求是在传感器打开时将列表条目的颜色更改为红色,在传感器关闭时将其更改为黑色。可以同时打开多个传感器。我使用以下代码,但请告诉我如何更改列表中的多个传感器条目?i、 e,如果打开3个传感器,列表中所有条目的颜色都应变为红色。提前谢谢Android自定义列表适配器-每个列表条目的颜色,android,listadapter,android-sensors,custom-lists,Android,Listadapter,Android Sensors,Custom Lists,我在UI中有一个Android传感器列表。我的整个应用程序都是一个服务,每个传感器都可以通过发送HTTP Post请求来打开/关闭。例如,http://IPaddress:port/accelerator/on将打开加速计。我的要求是在传感器打开时将列表条目的颜色更改为红色,在传感器关闭时将其更改为黑色。可以同时打开多个传感器。我使用以下代码,但请告诉我如何更改列表中的多个传感器条目?i、 e,如果打开3个传感器,列表中所有条目的颜色都应变为红色。提前谢谢 public View getView
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个传感器。但是有两个传感器用于重力、线性加速度等。getView()方法只对前10个条目进行迭代并重复这些条目 只要检查一下:
if(position %2 ==0){
((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.RED);
}
else{
((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.BLACK);
}
再次初始化文本视图以设置文本并设置另一个实例的颜色 您必须使用相同的文本视图实例来设置文本和设置颜色
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;
}
请尝试此代码。此代码已编辑,希望对您有所帮助。您可以创建不同的可绘制图形和形状,并在自定义适配器中选择正确的图形: 例如: 圆角
<?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);