C# Android-自定义listview c中的搜索选项
我有一个自定义的Listview,其中包含两个textview和一个imageview。listview包含100多行,这使得用户更难查看和选择他的项目。因此,我想添加搜索选项,以便于用户直接搜索他想要选择的项目。我已经在ListView上面添加了一个EditText,但是我不知道下一步该怎么做 Activity.cs: 因此,我希望过滤器按名称命名,例如,当他在EditText中写入字母F时,listview应仅显示法国和芬兰。我怎样才能做到?请帮助我。您想使用MultiAutoCompleteTextView或AutoCompleteTextView而不是EditText 从中可以看出它们之间的区别 如果你只想输入一个国家,你可以使用,这是官方的例子 更新: 我已更新我,以下是结果:C# Android-自定义listview c中的搜索选项,c#,android,visual-studio,listview,xamarin,C#,Android,Visual Studio,Listview,Xamarin,我有一个自定义的Listview,其中包含两个textview和一个imageview。listview包含100多行,这使得用户更难查看和选择他的项目。因此,我想添加搜索选项,以便于用户直接搜索他想要选择的项目。我已经在ListView上面添加了一个EditText,但是我不知道下一步该怎么做 Activity.cs: 因此,我希望过滤器按名称命名,例如,当他在EditText中写入字母F时,listview应仅显示法国和芬兰。我怎样才能做到?请帮助我。您想使用MultiAutoComplet
这不是问题所在。问题是listview。我只想在其中显示搜索的项目。比如,如果用户搜索法国,它应该只显示包含FranceSorry的行,我误解了你,你想要你的ListView滚动到法国,还是你想要你的ListView只显示法国?怎么样?adapter.getFilter.filters;你需要为你的适配器定制一个过滤器。这是一个更完整的例子。我有一个小问题,我在这里得到一个错误:results.Values=resultsValues;在FilterResults PerformFilteringCharSequence约束函数中,错误是:无法将类型TableList隐式转换为Java.Lang.Object??我已经编辑了我的演示,它将为您提供一些想法。
ListView mListView;
MyAdapter adapter;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
mListView = FindViewById<ListView>(Resource.Id.listview);
List<TableList> list = new List<TableList>();
EditText search = view.FindViewById<EditText>(Resource.Id.searchList);
list.Add(new TableList("Germany","Europe"));
list.Add(new TableList("France","Europe"));
list.Add(new TableList("Finland","Europe"));
list.Add(new TableList("Germany","Europe"));
list.Add(new TableList("France","Europe"));
list.Add(new TableList("Germany","Europe"));
list.Add(new TableList("France","Europe"));
list.Add(new TableList("Finland","Europe"));
adapter = new MyAdapter(this, list);
mListView.Adapter = adapter;
mListView.ItemClick += MListView_ItemClick;
}
class MyAdapter : BaseAdapter
{
Context mContext;
List<TableList> mitems;
public MyAdapter(Context context, List<TableList> list)
{
this.mContext = context;
this.mitems = list;
}
public override int Count
{
get
{
return mitems.Count;
}
}
public override Java.Lang.Object GetItem(int position)
{
return mitems[position];
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
DataViewHolder holder = null;
if (convertView == null)
{
convertView = LayoutInflater.From(mContext).Inflate(Resource.Layout.CoinList, null, false);
holder = new DataViewHolder();
holder.tv = convertView.FindViewById<TextView>(Resource.Id.CoinName);
holder.iv = convertView.FindViewById<ImageView>(Resource.Id.imageView1);
holder.cb = convertView.FindViewById<TextView>(Resource.Id.cont);
convertView.Tag = holder;
}
else
{
holder = convertView.Tag as DataViewHolder;
}
holder.cb.Tag = position;
holder.tv.Text = mitems[position].Name;
holder.cb.Text = mitems[position].Cont
holder.iv.SetImageResource(Resource.Drawable.dapao);
return convertView;
}
}
public class DataViewHolder : Java.Lang.Object
{
public ImageView iv { get; set; }
public TextView tv { get; set; }
public TextView cb { get; set; }
}
public class TableList : Java.Lang.Object
{
public TableList(string name, string cont)
{
this.Name = name;
this.Cont = cont;
}
public string Name { get; set; }
public string Cont { get; set; }
}
}