Ich versuche, Filter in ActionBar mit benutzerdefinierten Adapter zu implementieren.Implement Filtering mit benutzerdefinierten Adapter in Android mit C#
Mein benutzerdefinierter Adapter implementiert IFilterable. Und mein Filter Getter in benutzerdefinierten Adapter sieht wie folgt aus:
public Filter Filter {
get
{
if (tdFilter == null){
tdFilter = new TodoItemFilter();
tdFilter.OriginalData = this._originaltodoItemList;
tdFilter.TdAdapter = this;
}
return tdFilter;
}
}
Ich habe eine ItemFilter-Klasse erstellt.
Mein überschriebenen PerformFiltering Methode in ItemFilter.cs Code wie folgt aussieht:
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;
}
Meine überschriebenen Publishresults Methode wie folgt aussieht:
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();
}
}
Und meine JavaHolder Klasse wie folgt aussieht:
public class JavaHolder : Java.Lang.Object
{
public readonly object Instance;
public JavaHolder(object instance)
{
Instance = instance;
}
}
Meine "PerformFiltering" -Methode funktioniert einwandfrei.
Aber, in meiner "PublishResults" -Methode, ich bin nicht in der Lage, die results.Values zu meinem .NET-Objekt (TodoItem []) zu konvertieren. TdAdapter ist mein benutzerdefinierter Adapter.
TdAdapter._originaltodoItemList = ((JavaHolder)results.Values).Instance;
Kann mir bitte jemand in die richtige Richtung zeigen?
Fehle ich etwas?
Bitte helfen.