2016-03-27 13 views
2

edittext.I kullanarak anında arama işlevselliği uygulamak için çalışıyorum sadece liste görünümüne json dizisi yanıtını bağladı ve liste görünümünün üstündeki edittext ekledi ve filtrelemek veya listview'de veri aramak kullanıcı kodu aşağıdaki gibi edittext yazmaya başladığında. Lütfen bana yardım edin. Her türlü öneri, rehberlik ve yardım takdir edilmektedir. Bu sana benziyoranlık xamarin android edittext kullanarak liste için arama fonksiyonu

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

cevap

1

çok yakınsın. Son adım, tableItems'daki sonuçları filtrelemek için searchTerm'u kullanmaktır. Bunu yapmanın en kolay yolu, filtrelenmiş listeyle yeni bir HomeScreenAdapter oluşturmak ve bunu ListView.Adapter olarak belirlemektir. Uygulayan bu örnek kodu inceleyin: arama metnini almak, tüm TableItem örneklerinizi filtrelemek ve sonra ListView'e yeni bir Adaptör vermek.

_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 yan tümcesinin içinde TODO'ya dikkat edin. TableItem numaralı telefondan nasıl arama yapmak istediğiniz hakkında hiçbir fikrim yok ama Where cümlenizi yazdıktan sonra, bu sizin istediğiniz şeyi yapmalıdır. i kullanıcı enters.It zorundadır olarak liste görünümü mevcuttur harf veya metin/sözcük aramak istiyorsanız burada, Hi

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

: Bu sizin TableItem sınıfına benziyor

(referans için) böyle bir şeydir Liste görünümündeki tüm iki metin alanını arar. Listede daha fazla yardıma ihtiyacım var. – dafodil

+0

editfield içinde yazılan metin içeren bu öğeleri aramak istiyorum.Lütfen yardım et ben C# ve Xamarin public class için yeniyim TableItem { public int ID {get; set; } genel dize DDLValue {get; set; } genel dizgi Msg {get; set; } public int Durum {get; set; } – dafodil

+0

@dafodil "DDLValue" veya "Msg" öğelerinin bir alt dizgi olarak "searchTerm" içerip içermediğini kontrol edecek bir uygulama yazdım. – dylansturg