2016-06-27 3 views
0

, когда я пытаюсь изменить цвет фона позиции один в списке затем цвет фона как на одну позицию и пять измененийне мог получить правильную позицию в ListView

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. перед использованием зрителя он работал. я использовал зрителя, чтобы сделать гладкое скручивание в виде списка :) –

ответ

-1

Помещенный Этот метод в классе адаптера

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

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

Lol, он просто избавляется от всей идеи утилизации 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; 
    } 
    } 
Смежные вопросы