Я создал пользовательский адаптер для своего списка, который раздувает пользовательский вид и позволяет пользователю фильтровать список.
Это все работает нормально, но проблема в том, что значки, которые я поместил вэлементы списка не соответствуют отфильтрованным данным.
Пример
Обратите внимание, что значки не меняют положение, ноИмена фильтруются правильно.
Вот мой пользовательский адаптер, который выполняет настраиваемый просмотр списка
Я использую Mono, поэтому он написан на C #, но, надеюсь, вы, ребята, Javaбыть в состоянии сказать, что я делаю здесь также ...
/// <summary>
/// ArrayAdapter to handle displaying student with risk indicator
/// </summary>
private class StudentListAdapter : ArrayAdapter<Student>
{
private IList<Student> items;
private Context outer_context;
public StudentListAdapter(Context context, int resource, int textViewResourceId, IList<Student> items)
: base(context, resource, textViewResourceId, items)
{
this.items = items;
this.outer_context = context;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
LayoutInflater vi = (LayoutInflater)outer_context.GetSystemService(Context.LayoutInflaterService);
View tmpView = vi.Inflate(Resource.Layout.ItemStudent, null);
// call base.GetView that uses Object.ToString() to keep sorting intact
View v = base.GetView(position, tmpView, parent);
Student s = items[position];
if (s != null)
{
// determine correct risk image
ImageView listRisk = v.FindViewById<ImageView>(Resource.Id.listRisk);
if (s.R != null)
{
switch ((int)s.R.Value)
{
case 1:
listRisk.SetImageResource(Resource.Drawable.risk_green);
break;
case 0:
listRisk.SetImageResource(Resource.Drawable.risk_yellow);
break;
case -1:
listRisk.SetImageResource(Resource.Drawable.risk_red);
break;
case -2:
listRisk.SetImageResource(Resource.Drawable.risk_red2);
break;
default:
listRisk.SetImageResource(Resource.Drawable.risk_gray);
break;
}
}
else
{
listRisk.SetImageResource(Resource.Drawable.risk_gray);
}
}
return v;
}
}
ОБНОВЛЕНИЕ
После некоторых остановок и осмотра, я 'мы обнаружили, что при фильтрации списка он перестраивает весь список перед фильтрацией
Например, когда письмо вводится в поле фильтрации, первый студент (s
), который проходит через процесс GetView (), является Heath, Ackerson
, который является первым студентом в списке, даже если фильтр не соответствует ему.
Итак, похоже, что фильтрация выполняется ПОСЛЕ запуска GetView, оставляя изображения на месте ... Все еще не уверены, как это исправить ..
* ПОЛНОЕ РЕШЕНИЕ *
http://jondavidjohn.com/blog/2011/08/android-custom-listview-filtering