0

我有一个城市列表(其中约2500)。我希望用户在从列表中的edittextbox中输入时获得自动建议。这是如何实现的?我已经通过搜索Google,但找不到任何关于此的教程。非常感谢任何帮助。 谢谢。从Edittext的列表视图中的文字过滤Android

回答

2

您应该使用AutoCompleteTextView来实现此目的。

下面的代码片段显示了如何创建这表明不同国家的名字,同时在用户键入文本视图:

public class CountriesActivity extends Activity { 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.countries); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_dropdown_item_1line, COUNTRIES); 
     AutoCompleteTextView textView = (AutoCompleteTextView) 
       findViewById(R.id.countries_list); 
     textView.setAdapter(adapter); 
    } 

    private static final String[] COUNTRIES = new String[] { 
     "Belgium", "France", "Italy", "Germany", "Spain" 
    }; 
} 
+0

非常感谢,但我想稍微改变一下,我有一个适配器列表前10名(这是一个静态列表)。现在,当用户在edittext框中输入时,我想从我拥有的其他城市列表中筛选。我怎样才能做到这一点? – Namratha

+1

编写自定义适配器并将其传递给AutoCompleteTextView – Alex

+0

通过编辑文本和列表视图使用AutoCompleteTextView并将类型化文本传递给列表适配器的过滤器有什么优势? – Namratha

0

您可以使用“Filter”从其他列表中进行搜索。 实现您自己的过滤器[MyFilter extends Filter]并覆盖“FilterResults performFiltering(CharSequence prefix)”和“void publishResults(CharSequence constraint,FilterResults results)”方法,以在您自己的数据(国家/地区列表)上实现您自己的搜索逻辑。

添加在您的适配器getMyFilter()方法将返回一个“新myfilter”的 添加“TextWatcher”你“的EditText” 内部“onTextChanged()”的TextWatcher的方法,通过调用myAdapter让您的过滤器.getMyFilter()”。在该过滤器,称之为 “myFilter.filter(myTypedString)”。

过滤后 “无效publishResults(CharSequence的约束,FilterResults结果)” 的方法将被调用,里面的是,改变你的实际适配器数据刷新您的用户界面