Android - 滚动列表视图时出现问题

时间:2013-03-13 06:02:15

标签: android listview background-color

@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项目颜色随机变化。任何人都可以帮我解决..?

2 个答案:

答案 0 :(得分:2)

in

  

getView

设置背景颜色,在setTag if else block之外。并且是也添加其他。

喜欢

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

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

答案 1 :(得分: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;
        ...
        ...
        ...
    }