Android-Listview items background color changing when scrolling

后端 未结 4 472
小蘑菇
小蘑菇 2021-01-14 17:41

My ListView contains two Textviews. In one row first one is for name and second one is for result. I need to change the background color of the re

相关标签:
4条回答
  • 2021-01-14 18:28

    I think it is because list view recycles the view hence causing such problems .Try the following :

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

    Since convert view and row view both are intialized as null .Hence rows will be inflated every time and preventing recycling of views .

    Link: Listview android recycling This links explains the mechanism of recycling views.

    • use the above code if wrong views are changing color.
    • if you are trying to say on touching views while scrolling background becomes black then use the following in list view

    android:cacheColorHint="#00000000"

    0 讨论(0)
  • 2021-01-14 18:29

    Set this code on adapter (custom), so you can recycle the view with the previous color only if the view is selected.

    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE );
    
        Task task = taskArrayList.get(position);
    
        View view = inflater.inflate(R.layout.task_row, parent, false);
    
        if(MyActivity.getIsClicked() && MyActivity.getPositionClicked() == position){
            view.setBackgroundResource(R.color.backgroundSelectedItem);
        }
    
    0 讨论(0)
  • 2021-01-14 18:34

    You have to do something like this,

    if(Yourmark[position]<50) //Where Yourmark[] is the mark array you are passing to your custom adapter
    {
            holder.img.setImageResource(R.drawable.red_arrow);
            holder.txtViewDescription.setBackgroundResource(R.color.resultred);  
            holder.txtholder.setBackgroundResource(R.color.resultred);  
    }
    
    else
    {
            holder.img.setImageResource(R.drawable.green_arrow);
            holder.txtViewDescription.setBackgroundResource(R.color.resultgreen);  
            holder.txtholder.setBackgroundResource(R.color.resultgreen);  
    }
    }
    
    0 讨论(0)
  • 2021-01-14 18:42

    Try this

         @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());
    
    
    //**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** like//
    
         holder.txtViewDescription.setBackgroundResource(R.color.DEFAULCOLOR);  
         holder.txtholder.setBackgroundResource(R.color.DEFAULCOLOR); 
         holder.img.setImageResource(R.drawable.defalut_image);
    
    
    //**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** ok//
    
    
          //------------------  
            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;
        }
    
    0 讨论(0)
提交回复
热议问题