2016-03-23 30 views
1

Kullanıcı bir şey yazdığında verileri filtrelemek istediğim bir senaryo var. Şu anda Spinner kullanıyorum, ancak istediğim kullanıcı spinnerın kendisi hakkında veri yazabilmeli ve veriler çalışma zamanında filtrelenecek. İstediğime benzer bir şey bulamıyorum.Spinner için filtre ekleniyor ve spikerin kendi verilerine filtre uygulıyor

Aşağıdaki resme benzer bir şey (ASP.net'de kullanılan RadcomboBox örneğidir).

enter image description here

+1

Onun daha iyi kullanmak _AutoCompleteTextView_ –

+0

[AutoCompleteTextView] (-

 et_search.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { if(!s.toString().equals("")) { filterlist = new ArrayList<String>(); filterlist= getFilter(s.toString()); CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, filterlist); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); } else { CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); } } }); 

ListeGörünüm filtre işlevi altındadır kodunun altına kullanmak http://developer.android.com/reference/android/widget/AutoCompleteTextView.html) –

+0

Bir AutoCompleteTextView kullanmak bunu yapmak için daha iyi bir yol olacaktır. Bu durumda, afterTextChangedListener öğesini kullanabilir ve açılır listeyi doldurduğunuz listeden verileri filtrelemek için o anda metni kullanabilirsiniz. – Anshul

cevap

4

Sen o Listview göre EditText kutusuna yazdığınızda EditText ve ListView
kullanarak verileri refesh edeceğini elde edebilirsiniz. ArrayList<String> Citylist yükünü aşağıdaki kodda olduğu gibi CityAdapter yüküne bakın. Verileri yenilenir EditText Kutusu liste görünümü yazarken

CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist); 
listview.setAdapter(adapter); 

-

public ArrayList<String> getFilter(CharSequence charSequence) 
     { 
     ArrayList<String> filterResultsData = new ArrayList<String>();; 
       if(charSequence == null || charSequence.length() == 0) 
        { 
         return null; 
        } 
        else 
        { 


         for(String data : Citylist) 
         { 
          //In this loop, you'll filter through originalData and compare each item to charSequence. 
          //If you find a match, add it to your new ArrayList 
          //I'm not sure how you're going to do comparison, so you'll need to fill out this conditional 
          if(data.toLowerCase().contains(charSequence)) 
          { 
           filterResultsData.add(data); 
          } 
         }    

        } 

        return filterResultsData; 
       } 
+0

Bu yaklaşımı düşündüm ama liste görünümü çok sayıda veri içeriyor, başlangıçta liste görünümü doldurulacak ve büyük UI alanı tüketilecek, böylece spinner veya başka herhangi bir yaklaşım kullanmayı düşünmemek için. –

+0

, spinner show butonu yerine ve kullanıcı butona tıkladığında EditText ve Listview içeren özel layout ile özel alerDialog gösterebilirsiniz. –

+0

Tamam, bunu deneyeceğim. –