Я реализовал пользовательский адаптер списка и пользовательский фильтр.Я дошел до того, что смог отфильтровать свой список, набрав, однако, когда я удаляю свои ограничения, список не заполняется снова.Я использовал эти два источника, чтобы добраться туда, где я нахожусь.http://www.google.com/codesearch/p?hl=it#uX1GffpyOZk/core/java/android/widget/ArrayAdapter.java&q=android%20arrayadapter&sa=N&cd=1&ct=rc
и Пользовательская фильтрация в Android с помощью ArrayAdapter
Я заблудился, что делать дальше.Это мой код:
private class stationAdapter extends ArrayAdapter<Station>
{
//======================================
public ArrayList<Station> stations;
public ArrayList<Station> filtered;
private Filter filter;
//=====================
public stationAdapter(Context context, int textViewResourceId, ArrayList<Station> stations)
{
super(context, textViewResourceId, stations);
this.filtered = stations;
this.stations = filtered;
this.filter = new StationFilter();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Station temp = stations.get(position);
if (temp != null)
{
TextView stationName = (TextView) v.findViewById(R.id.stationname);
TextView serviced = (TextView) v.findViewById(R.id.inservice);
try
{
if (temp.isRedLine())
{
// v.setBackgroundResource(R.color.red);
ImageView imageView = (ImageView) v.findViewById(R.id.icon);
imageView.setImageResource(R.drawable.redstation);
v.setBackgroundResource(temp.getAreaColour());
}
else
{
ImageView imageView = (ImageView) v.findViewById(R.id.icon);
imageView.setImageResource(R.drawable.greenstation);
v.setBackgroundResource(temp.getAreaColour());
}
}
catch (Exception e)
{
Log.d(TAG, "Null pointer");
}
if (stationName != null)
{
stationName.setText(temp.getName());
}
if (serviced != null)
{
serviced.setText(temp.getIrishName());
}
}
return v;
}
//=====================================
@Override
public Filter getFilter()
{
if(filter == null)
filter = new StationFilter();
return filter;
}
private class StationFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// NOTE: this function is *always* called from a background thread, and
// not the UI thread.
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<Station> filt = new ArrayList<Station>();
ArrayList<Station> lItems = new ArrayList<Station>();
synchronized (this)
{
lItems.addAll(stations);
}
for(int i = 0, l = lItems.size(); i < l; i++)
{
Station m = lItems.get(i);
if(m.getName().toLowerCase().startsWith((String) constraint))
{
filt.add(m);
}
}
result.count = filt.size();
result.values = filt;
}
else
{
synchronized(this)
{
result.values = stations;
result.count = stations.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
filtered = (ArrayList<Station>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = filtered.size(); i < l; i++){
add(filtered.get(i));
}
notifyDataSetInvalidated();
}
}
//===================================================
}
Нужно ли переопределять больше методов из Filterable или мне нужно что-то делать с моими представлениями?
Любая помощь будет принята с благодарностью.