Android自动完成TextBox,设置您自己的具体建议?

时间:2011-04-25 04:59:56

标签: android autocomplete filtering

我在这里遇到一些技术问题,例如我有一个包含此列表的自动填充文本框适配器,[巴林,白俄罗斯,巴哈马]。如果我输入例如“啊”,我想在autocomplete_textbox的下拉列表中显示这两个,[巴林,巴哈马],因为那两个包含子串“啊”(B“啊”amas和B“啊”雨)。

请帮助我,一直想着这个。 :(

这是我的代码:

我的主要活动的onCreate()方法内部:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    countries = getResources().getStringArray(R.array.countries_array);       
    textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);     

    TextWatcher textChecker = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)                            {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            String enteredText = textView.getText().toString();
            refreshList(enteredText);
            textView.showDropDown();
        }
    };        

    textView.addTextChangedListener(textChecker);   

}

public void refreshList(String text) {
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, fetchTop20(countries, text));
    textView.setThreshold(1);
    textView.setAdapter(adapter);
}



public List<String> fetchTop20(String[] countries, String strToFind){


     List<String> arrList_countries =  Arrays.asList(countries);
     List<String> arrList_strTop20 = new ArrayList<String>();

     int ctrToTwenty = 0;
     for(String currCountry: arrList_countries)
     {
         if(currCountry.toLowerCase().contains(strToFind.toLowerCase()))
         {
             arrList_strTop20.add(currCountry);
             ctrToTwenty++;
         }
         if(ctrToTwenty == 20)
         {

             break;
         }           
     }
     Log.i(TAG, "strToFind: "+ strToFind);
     Log.i(TAG, "strTop20: "+arrList_strTop20);

     return arrList_strTop20;
}  

我的AutoCompleteTextBox的适配器包含一个里面有[巴哈马,巴林]的列表,但它的实际建议什么都没有。如果你键入“Bah”(虽然你应该输入单词的第一个字母以便显示),这是有效的:(。

任何建议Android专家?,因为我的代码的自动完成过滤没有在一个单独的线程中运行,请告诉我如何优化这个或告诉我如何线程这个代码进行优化。感谢。

1 个答案:

答案 0 :(得分:1)

回答标题中的问题......

Custom AutoComplete in Android

http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

-

阅读完整的问题后......

查看文档,看起来解决方案是使用自定义Filter制作自定义ListAdapter

谷歌搜索几秒钟就出现了使用自定义Filter的示例:Autocomplete items disappearing