2016-03-23 52 views
1

我有一個場景,我想在用戶鍵入內容時過濾數據。 我目前正在使用Spinner,但我想要的是用戶應該能夠在Spinner本身上寫入數據,並在運行時過濾數據。我無法找到與我想要的相似的東西。爲Spinner添加過濾器並過濾Spinner本身的數據

類似於下面的圖像(這是在asp.net中使用RadcomboBox的一個例子)。

enter image description here

+1

其更好地使用_AutoCompleteTextView_ –

+0

[AutoCompleteTextView]( http://developer.android.com/reference/android/widget/AutoCompleteTextView.html) –

+0

使用AutoCompleteTextView將是更好的方法。 在這種情況下,您可以使用afterTextChangedListener,並使用當時的文本過濾來自填充下拉列表的數據。 – Anshul

回答

4

可以實現,使用EDITTEXT和ListView
當你在盒子的EditText按照該列表視圖鍵入將refesh數據。 考慮初始值ArrayList<String> Citylist加載CityAdapter像下面的代碼。

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

當你的EditText框列表視圖類型將刷新數據 - 使用下面的代碼

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

        } 
        }); 

列表視圖過濾功能低於 -

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

我想到了這種方法,但listview包含大量的數據,最初的listview將會被填充,並且會佔用大量的UI空間,所以爲了避免我在考慮使用微調或其他方法。 –

+0

而不是微調顯示按鈕,當用戶點擊按鈕時,您可以顯示自定義的alerDialog與包含EditText和Listview的自定義佈局。 –

+0

好吧,我會嘗試。 –