在Xamarin中,我遇到了AutoCompleteTextView的自定義適配器問題。對AutoCompleteTextView使用自定義適配器的ClassCastException
這裏是我的代碼:
private void SetupAutoCompleteTextViewWithCustomAdapter()
{
List<CustomItem> customItems = new List<CustomItem>();
CustomItem customItem = new CustomItem();
customItem.Heading = "TestHeading";
customItem.SubHeading = "TestSubHeading";
customItems.Add(customItem);
customItem = new CustomItem();
customItem.Heading = "TestHeading 2";
customItem.SubHeading = "TestSubHeading 2";
customItems.Add(customItem);
customItem = new CustomItem();
customItem.Heading = "TestHeading 3";
customItem.SubHeading = "TestSubHeading 3";
customItems.Add(customItem);
AutoCompleteTextView AutoCompleteTextViewWithCustomAdapter = (AutoCompleteTextView) FindViewById(Resource.Id.AutoCompleteTextView);
AutoCompleteTextViewWithCustomAdapter.Adapter = new CustomAdapter (this, customItems);
}
這裏是我的自定義適配器:
public class CustomAdapter : BaseAdapter<CustomItem> {
List<CustomItem> items;
Activity context;
public CustomAdapter(Activity context, List<CustomItem> items)
: base()
{
this.context = context;
this.items = items;
}
public override long GetItemId(int position)
{
return position;
}
public override CustomItem this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
View view = convertView;
if (view == null) // no view to re-use, create new
view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
view.FindViewById<TextView>(Resource.Id.TextViewMapHeading).Text = item.Heading;
view.FindViewById<TextView> (Resource.Id.TextViewMapHeading).TextSize = 20;
view.FindViewById<TextView>(Resource.Id.TextViewItem).Text = item.SubHeading;
view.FindViewById<ImageView>(Resource.Id.Image).SetImageResource(item.ImageResourceId);
return view;
}
}
這裏是我的自定義項目類:
public class CustomItem
{
public string Heading { get; set; }
public string SubHeading { get; set; }
public int ImageResourceId { get; set; }
}
這裏是我的CustomView佈局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<LinearLayout
android:id="@+id/Text"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dip">
<TextView
android:id="@+id/TextViewMapHeading"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="28sp" />
<TextView
android:id="@+id/TextViewItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all" />
</LinearLayout>
<ImageView
android:id="@+id/Image"
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="5dp"
android:src="@drawable/icon"
android:visibility="invisible"
android:layout_alignParentRight="true" />
</RelativeLayout>
這裏是我得到的錯誤:
java.lang.ClassCastException:simplemapdemo.CustomAdapter不能 投地android.widget.Filterable
我可以請有一定的幫助得到這個工作?
在此先感謝
在哪一行發生? – nikis
在android.widget.AutoCompleteTextView.setAdapter(AutoCompleteTextView.java:618) – Garry