0

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 エントリに対してのみ反復し、それらを繰り返します。

4

3 に答える 3

0

テキストビューを再度初期化してテキストを設定し、別のインスタンスの色を設定しています

テキストビューの同じインスタンスを使用して、テキストを設定し、色を設定する必要があります

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;
    }

編集されているこのコードを試してください

于 2013-07-01T06:49:42.323 に答える
0

さまざまなドローアブルと形状を作成でき、カスタム アダプターで適切なものを選択できます。例: 角を丸くする

<?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);

もちろん、あなたの場合、たとえば位置に応じて適切な背景を選択します。もっと詳しく知りたい方はこちらのブログをご覧ください

于 2013-07-01T07:07:29.553 に答える
0

これを確認してください:

if(position %2 ==0){
((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.RED);
}
else{
((TextView)rowView.findViewById(R.id.txtTitle)).setTextColor(Color.BLACK);
}
于 2013-07-01T06:44:01.123 に答える