【问题标题】:instant Search functionality to listview using edittext in xamarin android使用 xamarin android 中的 edittext 对 listview 进行即时搜索功能
【发布时间】:2016-03-27 12:48:07
【问题描述】:

我正在尝试使用 edittext 实现即时搜索功能。我刚刚将 json 数组响应绑定到 listview 并在 listview 顶部添加了 edittext 并尝试在用户开始输入以下代码时在 listview 中过滤或搜索数据是用过。请帮帮我。任何形式的建议、指导和帮助表示赞赏。

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;
    }
}

【问题讨论】:

    标签: c# android listview xamarin adapter


    【解决方案1】:

    看起来你已经很接近了。最后一步是使用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 子句,这应该可以满足您的需求。

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

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

    【讨论】:

    • 嗨,我想在用户输入时搜索列表视图中存在的字母或文本/单词。它必须搜索列表视图中的所有两个文本字段。我需要更多帮助才能完成清单。
    • 我想在编辑字段中搜索包含键入文本的元素。请帮助我,我是 c# 和 Xamarin 的新手 public class TableItem { public int ID { get;放; } 公共字符串 DDLValue { 获取;放; } 公共字符串消息 { 获取;放; } 公共 int 状态 { 获取;放; }
    • @dafodil 我编写了一个实现,它将检查DDLValueMsg 是否包含searchTerm 作为子字符串。
    • 感谢您的帮助。
    • 在此处单击特定行无法在搜索后检索该特定对象。我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多