Я сделал то же самое с классом, который предоставляет отображаемую строку и преобразованную строку:
public class Element {
protected String dispString;
protected String convString;
public Element(String dispString)
this.dispString=dispString;
this.convString=getConvString(convString);
}
public String getDispString() {
return dispString;
}
public String toString() {
return convString;
}
public static String getConvString(val) {
if(val==null)
return null;
// Do your conversion here
}
Вместо массива строк я использовал массив экземпляров класса Element.Но мне пришлось использовать метод getView () ArrayAdapter для отображения dispString вместо неявной строки toString ():
adapter=new ArrayAdapter<Element>(this, R.layout.layout_gpslocator_g_owners_child, owners) {
public View getView(int position, View convertView, ViewGroup parent) {
View childView=super.getView(position, convertView, parent);
((TextView)childView.findViewById(<child TextView id>)).setText(this.getItem(position).getDispString());
return childView;
}
};
Element.toString()
затем используется для фильтрации.Element.getDispString()
используется для отображаемой строки.А во время инициализации массива все преобразования предварительно кэшируются, и нет необходимости в преобразовании данных представления списка во время фильтрации.Вы должны позвонить Element.getConvString(val)
для adapter.getFilter().filter()
вызова при изменении текста.
Надеюсь, это помогло.