2016-06-27 25 views
0

正确的位置,当我尝试改变的一个位置,背景色列表视图中那么这两个位置的背景色之一,五个转变进不去列表视图

public class MyAdapter extends ArrayAdapter<Item> { 


private final Context context; 
private final ArrayList<Item> itemsArrayList; 

static class ViewHolder { 

    TextView textday; 
    TextView text1; 
    TextView text2; 
    TextView text3; 

} 

public MyAdapter(Context context, ArrayList<Item> itemsArrayList) { 

    super(context, R.layout.list_row, itemsArrayList); 

    this.context = context; 
    this.itemsArrayList = itemsArrayList; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 
    if(convertView==null){ 


     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.list_row, parent, false); 

     viewHolder = new ViewHolder(); 

     viewHolder.textday = (TextView)convertView.findViewById(R.id.w1); 
     viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1); 
     viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2); 
     viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3); 



     convertView.setTag(viewHolder); 
    } 

    else{ 

     viewHolder = (ViewHolder) convertView.getTag(); 
    } 



    viewHolder.text1.setText(itemsArrayList.get(position).getTitle()); 
    viewHolder.text2.setText(itemsArrayList.get(position).getDescription()); 
    viewHolder.text3.setText(itemsArrayList.get(position).getthird()); 
    viewHolder.textday.setText(itemsArrayList.get(position).getDay()); 

    viewHolder = (ViewHolder)convertView.getTag(); 

    if(position == 1) 
    { 
     convertView.setBackgroundColor(Color.parseColor("#00796b")); 
     viewHolder.text1.setTextColor(Color.parseColor("#ffffff")); 
     viewHolder.text2.setTextColor(Color.parseColor("#ffffff")); 
     viewHolder.text3.setTextColor(Color.parseColor("#ffffff")); 
    } 

    return convertView; 

} 


} 
+2

明显地'if(position == 1)'也应该有'else'部分。你应该在那里设置默认颜色。 – Selvin

+0

是的,但问题出现,因为我用了viewholder。在使用viewholder之前它正在工作。我使用viewholder使列表视图顺利scrooling :) –

回答

-1

把这个方法在你的适配器类

@Override 
public int getViewTypeCount() { 
    return YourList.size(); 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 
+0

大声笑,它只是摆脱ListView的整个回收想法...这是多么糟糕的应用程序。 – Selvin

+0

工程。谢谢:) –

+0

@SarojRaut它是可怕的解决方案...这是一样的,你不会使用ViewHolder和在每个getView调用 – Selvin

0

我在您的代码中进行了更改。让我知道如果它不起作用。但是最不可能工作的机会是......

public class MyAdapter extends ArrayAdapter<Item> { 


     private final Context context; 

     private final ArrayList<Item> itemsArrayList; 

     static class ViewHolder { 

     TextView textday; 
     TextView text1; 
     TextView text2; 
     TextView text3; 

    } 

    public MyAdapter(Context context, ArrayList<Item> itemsArrayList) { 

     super(context, R.layout.list_row, itemsArrayList); 

     this.context = context; 
     this.itemsArrayList = itemsArrayList; 
    } 

    @Override 
    public int getCount() { 
     return itemsArrayList.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return itemsArrayList.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder; 
     if(convertView==null){ 


      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.list_row, parent, false); 

      viewHolder = new ViewHolder(); 

      viewHolder.textday = (TextView)convertView.findViewById(R.id.w1); 
      viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1); 
      viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2); 
      viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3); 



      convertView.setTag(viewHolder); 
     } 

     else{ 

      viewHolder = (ViewHolder) convertView.getTag(); 
     } 



     viewHolder.text1.setText(itemsArrayList.get(position).getTitle()); 
     viewHolder.text2.setText(itemsArrayList.get(position).getDescription()); 
     viewHolder.text3.setText(itemsArrayList.get(position).getthird()); 
     viewHolder.textday.setText(itemsArrayList.get(position).getDay()); 

    /* no need again access viewHolder over here you already done this part viewHolder = (ViewHolder)convertView.getTag(); so remove this part*/ 

     if(position == 1) 
     { 
      convertView.setBackgroundColor(Color.parseColor("#00796b")); 
      viewHolder.text1.setTextColor(Color.parseColor("#ffffff")); 
      viewHolder.text2.setTextColor(Color.parseColor("#ffffff")); 
      viewHolder.text3.setTextColor(Color.parseColor("#ffffff")); 
     }else{ 
      //add this additional code to change old color if position is not equal to zero. 
      convertView.setBackgroundColor(Color.parseColor("replaceColorCode")); 
      viewHolder.text1.setTextColor(Color.parseColor("replaceColorCode")); 
      viewHolder.text2.setTextColor(Color.parseColor("replaceColorCode")); 
      viewHolder.text3.setTextColor(Color.parseColor("replaceColorCode")); 

    } 
     return convertView; 
    } 
    }