在 xamarin android 中使用 edittext 对列表视图进行即时搜索功能

instant Search functionality to listview using edittext in xamarin android

我正在尝试使用 edittext.I 实现即时搜索功能,刚刚将 json 数组响应绑定到列表视图,并在列表视图顶部添加了编辑文本,并尝试以用户身份在列表视图中过滤或搜索数据开始输入代码下方的 edittext 是 used.Please 帮助我。感谢任何类型的建议、指导和帮助。

MainActivity.cs

  SetContentView(Resource.Layout.HomeScreen);
                tableItems = new List<TableItem>();

                var client = new RestClient("http://azurewebsites.net/");
                var request = new RestRequest("Service/regionSearch", Method.POST);
                request.RequestFormat = DataFormat.Json;
                tableItems = client.Execute<List<TableItem>>(request).Data;

                listView.Adapter = new HomeScreenAdapter(this, tableItems);
                 region = FindViewById<TextView> (Resource.Id.viewtext);
     area= FindViewById<TextView> (Resource.Id.viewtext2);
                _filterText = FindViewById<EditText>(Resource.Id.search);
                listView = FindViewById<ListView>(Resource.Id.listView);
 _filterText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => {
                // filter on text changed
                var searchTerm = _filterText.Text;
};    


        listView.ItemClick += OnListItemClick;
    }

    protected void OnListItemClick(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)
    {
        var listView = sender as ListView;
         var t = tableItems[e.Position];
    //   var clickedTableItem = listView.Adapter[e.Position];
        Android.Widget.Toast.MakeText(this, clickedTableItem.DDLValue, Android.Widget.ToastLength.Short).Show();

    }

HomeScreenAdapter.cs

public class HomeScreenAdapter : BaseAdapter<TableItem> {
    List<TableItem> items;
    Activity context;
    public HomeScreenAdapter(Activity context, List<TableItem> items)
        : base()
    {

            this.context = context;
        this.items = items;
    }
    public override long GetItemId(int position)
    {
        return position;
    }
    public override TableItem 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];

          //  TableItem 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.Text1).Text = item.DDLValue;
       view.FindViewById<TextView>(Resource.Id.Text2).Text = item.areaMsg;
          return view;
    }
}

看起来你很接近。最后一步是使用 searchTerm 筛选出 tableItems 中的结果。最简单的方法是简单地用筛选列表创建一个新的 HomeScreenAdapter,并将其设置为 ListView.Adapter。查看实现的示例代码:获取搜索文本,过滤所有 TableItem 实例,然后为 ListView 提供一个新的适配器。

 _filterText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => {
            // filter on text changed
            var searchTerm = _filterText.Text;
            var updatedTableItems = tableItems.Where(
                // TODO Fill in your search, for example:
                tableItem => tableItem.Msg.Contains(searchTerm) ||
                             tableItem.DDLValue.Contains(searchTerm)
            ).ToList();
            var filteredResultsAdapter = new HomeScreenAdapter(this, updatedTableItems);
            listView.Adapter = filteredResultsAdapter;
 };    

注意 Where 子句中的 TODO。我不知道您想如何在 TableItem 上搜索,但是一旦您编写了 Where 子句,这应该可以满足您的要求。

看起来你的TableItemclass是这样的(供参考):

public class TableItem {
    public int Id {get; set;}
    public string DDLValue {get; set;}
    public string Msg {get; set;}
    public int Status {get; set;}
}