1

Я создал пользовательский ArrayAdapter (код ниже), который отлично работает, пока я не прокручу. Как только я прокручу все предметы, пойдите зелеными, и я тянул свои волосы, пытаясь понять, почему. Любая помощь будет принята с благодарностью.Андроид ArrayAdapter не остался на свитке

Пользовательский адаптер предназначен для того, чтобы сделать текст любого элемента списка ListView длиной 3 символа зеленым, а все остальные должны быть черного цвета по умолчанию.

public class FoundAdapter extends ArrayAdapter<String> { 

    private final Activity context; 
    private final ArrayList<String> names; 

    static class ViewHolder { 
    public TextView text; 
    } 

    public FoundAdapter(Activity context, ArrayList<String> names) { 
    super(context, R.layout.found, names); 
    this.context = context; 
    this.names = names; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.found, null); 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) rowView.findViewById(R.id.found_txt); 
     rowView.setTag(viewHolder); 
    } 

    ViewHolder holder = (ViewHolder) rowView.getTag(); 
    String s = names.get(position); 
    if(s.length()==3) { 
     holder.text.setTextColor(0xFF008B45); //green 
    } 
    holder.text.setText(s); 

    return rowView; 
    } 
} 

Вызывается в коде .java через:

adapter=new FoundAdapter(this, array);  
ListView view = (ListView) findViewById(R.id.list); 
view.setAdapter(adapter); 

R.layout.found:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal"> 

<TextView 
    android:id="@+id/found_txt" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textSize="20sp"  
/> 
</LinearLayout> 

ответ

2

Проблема заключается в том, что вы не сбросить цвет текста, если условие не удовлетворяет. В представлениях Listviews переработаны.

так что-то вроде этого

if(s.length()==3) { 
    holder.text.setTextColor(0xFF008B45); //green 
}else{ 
    holder.text.setTextColor(xyz); //xyz 
} 
+0

OMG работает как шарм спасибо так много! –

0

Вы должны использовать этот цвет состояние вне адаптер поставить его в списке массива вне вашего адаптера

 if(s.length()==3) { 
     /** 
     put your green color in array list 
     */ 
     }else{ 
     //put your other color 
     } 

& в адаптере просто использовать: -

holder.text.setText(list.get(position).colorName); 
+0

Можете ли вы быть немного более ясно, что я не совсем уверен, что вы имеете в виду –

0
public class FoundAdapter extends ArrayAdapter<String> { 

    private final Activity context; 
    private final ArrayList<String> names; 

    public FoundAdapter(Activity context, ArrayList<String> names) { 
     super(context, R.layout.found, names); 
     this.context = context; 
     this.names = names; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     if (rowView == null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.found, null); 
      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) rowView 
        .findViewById(R.id.found_txt); 
      rowView.setTag(viewHolder); 
     } 

     ViewHolder holder = (ViewHolder) rowView.getTag(); 
     String s = names.get(position); 
     if (names.get(position).length() == 3) { 
      holder.text.setTextColor(0xFF008B45); // green 
      holder.text.setText(s); // green 
     } 
     else 
     { 
      holder.text.setTextColor(0x11111111); // green 
      holder.text.setText(s); // green 
     } 

     //holder.text.setText(s); 

     return rowView; 
    } 
} 

static class ViewHolder { 
    public TextView text; 
} 
Смежные вопросы