0
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        LinearLayout root_view = (LinearLayout) row
                .findViewById(R.id.list_root_view);

        int evenRow = position % 2;
        if (evenRow == 0) {
            root_view.setBackgroundColor(context.getResources().getColor(
                    android.R.color.darker_gray));
        }

        holder = new ViewHolder();
        holder.date = (TextView) row.findViewById(R.id.dateTextView);
        holder.time = (TextView) row.findViewById(R.id.timeTextView);
        holder.breachNo = (TextView)row.findViewById(R.id.breachNoTextView);
        holder.fee = (TextView) row.findViewById(R.id.feeTextView);
        holder.orderCheckBox =CheckBox)row.findViewById(R.id.orderCheckBox);
        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

    historyData = arraylist.get(position);
    holder.date.setText(historyData.getDate() + "");
    holder.time.setText(historyData.getTime().toString());
    holder.breachNo.setText(historyData.getBreachNo() + "");
    holder.fee.setText(historyData.getFee() + "");
    holder.orderCheckBox.setEnabled(true);

    return row;
}

上記のコードでは、いくつかの問題があります。listviewアイテムの色を代わりに設定したい。(たとえば、奇数行は青色、偶数行は灰色)。アクティビティをロードすると、色が完全に得られました。問題は、スクロール中 listviewにアイテムの色がランダムに変化することです。誰でも修正を手伝ってもらえますか..?

4

2 に答える 2

2

getView

else ブロックの場合は setTag の外側で背景色を設定します。はい、他にも追加します。

お気に入り

if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        LinearLayout root_view = (LinearLayout) row
                .findViewById(R.id.list_root_view);

        int evenRow = position % 2;
        if (evenRow == 0) {
            root_view.setBackgroundColor(context.getResources().getColor(
                    android.R.color.darker_gray));
        }

        holder = new ViewHolder();
        holder.date = (TextView) row.findViewById(R.id.dateTextView);
        holder.time = (TextView) row.findViewById(R.id.timeTextView);
        holder.breachNo = (TextView)row.findViewById(R.id.breachNoTextView);
        holder.fee = (TextView) row.findViewById(R.id.feeTextView);
        holder.orderCheckBox =CheckBox)row.findViewById(R.id.orderCheckBox);
        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

int evenRow = position % 2;
        if (evenRow == 0) {
            root_view.setBackgroundColor(context.getResources().getColor(
                    android.R.color.darker_gray));
        } else {
              root_view.setBackgroundColor(context.getResources().getColor(
                    android.R.color.blue));

} ......... ..........

于 2013-03-13T06:08:09.717 に答える
0

使用できます

        @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

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

            holder = new ViewHolder();
            holder.root_view = (LinearLayout) row
            .findViewById(R.id.list_root_view);
            holder.date = (TextView) row.findViewById(R.id.dateTextView);
            holder.time = (TextView) row.findViewById(R.id.timeTextView);
            holder.breachNo = (TextView)row.findViewById(R.id.breachNoTextView);
            holder.fee = (TextView) row.findViewById(R.id.feeTextView);
            holder.orderCheckBox =CheckBox)row.findViewById(R.id.orderCheckBox);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        int evenRow = position % 2;
        historyData = arraylist.get(position);
        holder.date.setText(historyData.getDate() + "");
        holder.time.setText(historyData.getTime().toString());
        holder.breachNo.setText(historyData.getBreachNo() + "");
        holder.fee.setText(historyData.getFee() + "");
        holder.orderCheckBox.setEnabled(true);

        if (evenRow == 0) {
            holder.root_view.setBackgroundColor(context.getResources().getColor(
                        android.R.color.darker_gray));
            }
        else
            holder.root_view.setBackgroundColor(context.getResources().getColor(
                        android.R.color.blue));

        return row;
    }

LinearLayoutまた、ViewHolderクラスに追加する必要があります

class ViewHolder{
        LinearLayout root_view;
        ...
        ...
        ...
    }
于 2013-03-13T06:28:53.383 に答える