滚动时Android-Listview项目背景颜色改变

标签 android android-listview

我的 ListView 包含两个 Textviews。在一行中,第一行是名称,第二行是结果。我需要根据结果更改结果 TextView 的背景颜色。就像如果通过那么结果 TextView 颜色将是绿色,如果失败结果 TextView 颜色将是红色。我的 ListView 中有十行。我试过这样

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    ViewHolder holder;
    if(convertView==null)
    {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.items, null);

        holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
        holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle);
        holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);
        holder.txtholder = (TextView) convertView.findViewById(R.id.holder1);
        holder.img = (ImageView)  convertView.findViewById(R.id.temperrr);
        convertView.setTag(holder);
    }
    else
        holder=(ViewHolder)convertView.getTag();

    ItemBean bean = (ItemBean) itemList.get(position);

    holder.imgViewLogo.setImageResource(bean.getImage());
    holder.txtViewTitle.setText(bean.getTitle());
    holder.txtViewDescription.setText(bean.getDescription());
  //------------------  
    if (position==0)
    {
        if(GridviewAdapter.glu>=81)
        {
        holder.img.setImageResource(R.drawable.red_arrow);
        holder.txtViewDescription.setBackgroundResource(R.color.resultred);  
        holder.txtholder.setBackgroundResource(R.color.resultred);  
        }
        else if (GridviewAdapter.glu==79||GridviewAdapter.glu==80)
        {
            holder.img.setImageResource(R.drawable.orange_arrow);
            holder.txtViewDescription.setBackgroundResource(R.color.resultoren);  
            holder.txtholder.setBackgroundResource(R.color.resultoren);  
        }
        else
        {
            holder.img.setImageResource(R.drawable.resultarrawnocolor);
            holder.txtViewDescription.setBackgroundResource(0);  
            holder.txtholder.setBackgroundResource(0);  
        }

    }
        holder.img.setImageResource(R.drawable.resultarrawnocolor);
       return convertView;
}

但是,当滚动列表时,另一个随机项目的背景颜色发生变化。我必须做什么。?如何控制 ListView 中每个位置的项目。上面的代码仅适用于第一行。我对吗?

最佳答案

我认为这是因为 ListView 回收了 View ,因此导致了此类问题。请尝试以下操作:

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

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) _context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.row, parent,
                    false);
                       // your code 


          }
     return row;
}

由于转换 View 和行 View 都被初始化为 null 。因此每次都会膨胀行并阻止 View 的回收。

链接: Listview android recycling 此链接解释了回收 View 的机制。

  • 如果错误的 View 正在改变颜色,请使用上面的代码。
  • 如果你想说在滚动背景变黑时触摸 View ,那么在 ListView 中使用以下内容

android:cacheColorHint="#00000000"

关于滚动时Android-Listview项目背景颜色改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601760/

相关文章:

java - GCM 有时有效,有时无效

java - Firebase 云消息通知仅在我打开 "notification tab"时显示

android - 来自 Google 的 ExpandableListView 示例

java - FilterListView - 从列表中删除不以提供的前缀开头的项目

带有 ListView 的 Android Widget 仅显示加载 View

android - java.util.FormatFlagsConversionMismatchException : Conversion = s, 标志 =

java - XmlSerializer 会不会返回一个太长的 String 而不是 Java 中的字符串?

android - 如何在没有 savedInstanceState 的情况下恢复 fragment 状态?

android - 从点击的 ListView 开始新 Activity 的最佳方式

android - 在 Listview 的第一行添加 ViewFlipper