为 Spinner 添加过滤器并过滤 Spinner 本身的数据

Sag*_*hta 1 android android-spinner

我有一个场景,我想在用户键入内容时过滤数据。我目前正在使用 Spinner,但我想要的是用户应该能够在 Spinner 本身上写入数据,并且数据在运行时被过滤。我找不到与我想要的类似的东西。

类似于下图的东西(它是 ASP.net 中使用的 RadcomboBox 示例)。

在此处输入图片说明

sar*_*ate 6


当您在 EditText 框中键入时,您可以使用 Edittext 和 Listview 实现这一点,因为 Listview 将刷新数据。考虑如下代码中的初始ArrayList<String> Citylist加载CityAdapter

CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist );
listview.setAdapter(adapter);   
Run Code Online (Sandbox Code Playgroud)

当您输入 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();
                      }

                  }
                  });
Run Code Online (Sandbox Code Playgroud)

Listview过滤器功能如下 -

 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;
                }
Run Code Online (Sandbox Code Playgroud)