Özel Adaptörle ActionBar uygulamasında Filtre uygulamasına çalışıyorum.Android ile Özel Adaptörle Filtreleme Uygula C#
Özel bağdaştırıcım IFilterable uygular. Bir ItemFilter sınıfı oluşturduk
public Filter Filter {
get
{
if (tdFilter == null){
tdFilter = new TodoItemFilter();
tdFilter.OriginalData = this._originaltodoItemList;
tdFilter.TdAdapter = this;
}
return tdFilter;
}
}
: gibi Ve özel adaptör benim Filtre alıcı görünüyor.
protected override Filter.FilterResults PerformFiltering(Java.Lang.ICharSequence constraint)
{
FilterResults oreturn = new FilterResults();
if (constraint == null || constraint.Length() == 0)
{
oreturn.Values = this.OriginalData.ToJavaObject();
oreturn.Count = this.OriginalData.Length;
}
else
{
string[] actualResults = new string[this.originalData.Length];
List<TodoItem> tdiList = new List<TodoItem>();
int i=0;
foreach (TodoItem td in this.originalData)
{
if(td.Name.ToUpperInvariant().StartsWith(constraint.ToString().ToUpperInvariant())){
tdiList.Add (td);
i++;
}
}
oreturn.Values = tdiList.ToJavaObject();
oreturn.Count = tdiList.Count;
}
return oreturn;
}
Benim overriden Publishresults yöntemi gibi görünüyor:
protected override void PublishResults(Java.Lang.ICharSequence constraint, Filter.FilterResults results)
{
if (results.Count == 0)
this.TdAdapter.NotifyDataSetInvalidated();
else
{
var propertyInfo = ((JavaHolder)results.Values).Instance;
TdAdapter.NotifyDataSetChanged();
}
}
Ve JavaHolder sınıfı gibi görünür:
public class JavaHolder : Java.Lang.Object
{
public readonly object Instance;
public JavaHolder(object instance)
{
Instance = instance;
}
}
gibi
ItemFilter.cs kodunda Benim overriden PerformFiltering yöntemi görünüyor
"PerformFiltering" yöntemim düzgün çalışıyor.
Ancak, "PublishResults" yöntemimde, results.Values öğesini benim .NET nesnelerine (TodoItem []) dönüştürebiliyorum. TdAdapter benim özel adaptörüm.
TdAdapter._originaltodoItemList = ((JavaHolder)results.Values).Instance;
Birisi bana lütfen doğru yöne işaret edebilir mi?
Bir şey mi eksik?
LütfenYardım edin.