2016-03-23 56 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

好吧,我会尝试。 –