2016-03-27 56 views
2

我想使用edittext.I實現即時搜索功能,剛剛綁定了對listview的json數組響應,並在listview頂部添加了edittext,並嘗試在listview中過濾或搜索數據當用戶開始在下面的edittext中輸入代碼時,請幫助我。任何類型的建議,指導和幫助表示讚賞。即時在xamarin中使用edittext搜索功能使用edittext android

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

回答

1

看起來你很接近。最後一步是使用searchTerm過濾掉tableItems中的結果。最簡單的方法是使用已過濾的列表簡單創建一個新的HomeScreenAdapter,並將其設置爲ListView.Adapter。查看這個示例代碼實現:獲取搜索文本,篩選所有的TableItem實例,然後給ListView一個新的Adapter。

_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;} 
} 
+0

嗨,我在這裏想搜索的字母或文字/詞出現在列表視圖爲用戶enters.It有搜索列表視圖中的所有兩個文本字段。我需要一些更多的幫助來做清單。 – dafodil

+0

我想在editfield中搜索包含輸入文本的元素。請幫助我,我是新來的c#和Xamarin公共類TableItem { public int ID {get;組; } public string DDLValue {get;組; } public string Msg {get;組; } public int Status {get;組; } – dafodil

+0

@dafodil我寫了一個實現,它將檢查'DDLValue'或'Msg'是否包含'searchTerm'作爲子字符串。 – dylansturg