2015-06-02 2 views
0

У меня есть массив строк, как: -Фильтр специальные символы для AutoCompleteTextView Android

public static string[] vehicleArray = string[]{"01:00 India-Malaysia","02:00 India-Singapore","03:00 India-Malaysia"}; 

Iam проходящими этот массив к AutoCompleteTextView как так: -

ArrayAdapter adapter = new ArrayAdapter<System.String> (this, Resource.Layout.rout_row, vehicleArray); 

    autoCompleteBusStop.Adapter = adapter; 

Вопрос Я облицовкой, если я напечатаю Индию, предметы отображаются правильно, но если я войду в «Малайзию» или «Сингапур», предметы не отображаются, вероятно, потому, что «Малайзия» рассматривается как одно слово. Если я набираю «-», элементы отображаются. Как я могу искать, даже если я набираю Малайзию?

ответ

0

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

public class CustomAdapter extends BaseAdapter implements Filterable { 
 

 

 
private Context context; 
 

 

 
private List<String> originalData; 
 
private List<String> filteredData; 
 

 
private ItemFilter mFilter = new ItemFilter(); 
 

 
public CustomAdapter(List<String> itemList, Context ctx) { 
 

 
    originalData = new ArrayList<String>(); 
 
    filteredData = new ArrayList<String>(); 
 

 
    filteredData = itemList; 
 
    originalData = itemList; 
 

 
    context = ctx; 
 
} 
 

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

 
@Override 
 
public Object getItem(int position) { 
 
    return filteredData.get(position); 
 
} 
 

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

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

 
    if (convertView == null) { 
 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
     convertView = inflater.inflate(android.R.layout.simple_dropdown_item_1line, null); 
 
    } 
 

 
    final TextView text = (TextView) convertView.findViewById(android.R.id.textView); 
 

 
    text.setText(filteredData.get(position)); 
 

 
    return convertView; 
 
} 
 

 
public Filter getFilter() { 
 
    return mFilter; 
 
} 
 

 
private class ItemFilter extends Filter { 
 
    @Override 
 
    protected FilterResults performFiltering(CharSequence constraint) { 
 

 
     String filterString = constraint.toString().toLowerCase(); 
 

 
     Filter.FilterResults results = new FilterResults(); 
 

 
     final List<String> list = originalData; 
 

 
     int count = list.size(); 
 
     final ArrayList<String> nlist = new ArrayList<String>(count); 
 

 
     String filterableString; 
 

 
     for (int i = 0; i < count; i++) { 
 

 
      filterableString = list.get(i); 
 

 
      if (filterableString.toLowerCase().contains(filterString)) { 
 
       nlist.add(filterableString); 
 
      } 
 
     } 
 

 
     results.values = nlist; 
 
     results.count = nlist.size(); 
 

 
     return results; 
 
    } 
 

 
    @SuppressWarnings("unchecked") 
 
    @Override 
 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
 
     filteredData = (ArrayList<String>) results.values; 
 
     notifyDataSetChanged(); 
 
    } 
 

 
} 
 

 
}

+0

Это дает мне ошибку в 'results.values ​​= NLIST,' 'говоря Не может неявно преобразовать тип«System.Collections.Generic .List 'to' Java.Lang.Object'' – user3034944

Смежные вопросы