1

このコードでListViewのアイテムに色を付けたい:

holder.txtPosition = (TextView)row.findViewById(R.id.txtPosition); holder.txtPosition.setTextColor(0xFF00CC00);

それはうまく機能していますが、10個ごとのアイテムにも色が付いています。例:最初のアイテムの色を設定したので、10個ごとのアイテムにも色が付けられます。

下にスクロールしてもう一度上にスクロールすると、さらに多くの色が表示されます。

この画像では、最初の「ユーザー投票」テキストに色を付けてから、非常に速く下にスクロールして、上にスクロールして戻しました。

緑のテキスト

これはどんな魔術ですか?

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class List extends ArrayAdapter<ListItem>{

    Context context; 
    int layoutResourceId;    
    ListItem data[] = null;

    public List(Context context, int layoutResourceId, ListItem[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data; 
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        WeatherHolder holder = null;
        ListItem entry = data[position];

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new WeatherHolder();
            holder.txtVideos = (TextView)row.findViewById(R.id.txtVideos);
            holder.txtPosition = (TextView)row.findViewById(R.id.txtPosition);
            holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
            holder.txtcomments = (TextView)row.findViewById(R.id.txtcomment);

            row.setTag(holder);

            if (entry.fav){
                //row.setBackgroundColor(0xFFfcf6bb);
            }
        }
        else
        {
            holder = (WeatherHolder)row.getTag();
        }
        holder.txtTitle.setText(entry.teilnehmer);
        holder.txtPosition.setText(entry.position);

        int num = Integer.parseInt(entry.videos);
        if (num == 0 || num > 1){
            holder.txtVideos.setText(entry.videos + " Videos");
        } else {
            holder.txtVideos.setText(entry.videos + " Video");
        }

        if (holder.txtPosition.getText().equals("Ausgeschieden")){
            holder.txtPosition.setTextColor(0xFFFF0000);
        } else if(holder.txtPosition.getText().equals("User-Voting")){
            holder.txtPosition.setTextColor(0xFF00CC00);
        }

        num = Integer.parseInt(entry.comment);
        if (num == 0 || num > 1){
            holder.txtcomments.setText(entry.comment + " Kommentare");
        } else {
            holder.txtcomments.setText(entry.comment + " Kommentar");
        }
        return row;
    }

    static class WeatherHolder
    {
        TextView txtTitle;
        TextView txtVideos;
        TextView txtPosition;
        TextView txtcomments;
    }
}
4

1 に答える 1

2

ListView要素をリサイクルしています(これは良いことです)。しかし、そのようなビューがgetViewメソッドに渡されるとき、それはまだそれが保持していた最後の要素の状態にあります。したがって、setColorこの値を指定すると、コンテナに挿入される次のテキストにも適用されます。したがって、リサイクルされたビューを再作成するときに、色の定義もリセットする必要があります。

if (holder.txtPosition.getText().equals("Ausgeschieden")) {
    holder.txtPosition.setTextColor(0xFFFF0000);
} else if (holder.txtPosition.getText().equals("User-Voting")) {
    holder.txtPosition.setTextColor(0xFF00CC00);
} else {
    holder.txtPosition.setTextColor(R.color.your_default);
}
于 2013-01-24T12:02:32.347 に答える