【问题标题】:Android - Issue when scrolling my list viewAndroid - 滚动我的列表视图时出现问题
【发布时间】:2013-02-28 23:08:16
【问题描述】:
@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 时,项目的颜色会随机变化。谁能帮我解决..?

【问题讨论】:

  • 滚动时是否显示为黑色??
  • 不,蓝色和灰色随机出现。

标签: android listview background-color


【解决方案1】:

在

获取视图

设置背景颜色,在 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));

} ………… …………

【讨论】:

    【解决方案2】:

    你可以使用

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

    您还应该在 ViewHolder 类中添加您的 LinearLayout

    class ViewHolder{
            LinearLayout root_view;
            ...
            ...
            ...
        }
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多