Android AutocompleteTextview内联预测

时间:2014-02-16 13:50:07

标签: android autocompletetextview

我正在尝试实现一个AutocompleteTextview,非常类似于我的Android应用中的谷歌自动完成功能。

我得到了所有的预测,但我仍然错过了一个功能。我希望下拉列表的第一个预测将显示在AutocompleteTextview的EditText中。此外,我希望当用户点击返回(或Tab)时选择该项目,就像谷歌在浏览器中一样。

有没有办法用Android的AutocompleteTextview做到这一点?

2 个答案:

答案 0 :(得分:0)

使用Textwatcher

eds.addTextChangedListener(new TextWatcher(){

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub


        }

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

答案 1 :(得分:0)

由于我无法找到从Adapter扩展名“外部”获取当前建议列表的方法,我会执行以下操作:

免责声明:我从未尝试过这样的事情,也没有资源可以立即尝试,愤怒的老板危险。

假设您正在扩展具有内部过滤器的Adapter进行过滤过程,您应该覆盖publishResults()方法。我的提示是:声明类型为String that when的类范围变量publishResults()is called, also sets it to the first of the FilterResults`字符串:

@Override
protected void publishResults(final CharSequence constraint, final FilterResults results) {
  currentObjects = (List<T>) results.values;

  if (results.count > 0) {
    myFirstSuggestion = currentObjects.toString();
    notifyDataSetChanged();
  }
  else
    notifyDataSetInvalidated();
}

此外,创建一个名为getFirstSuggestion()的新方法,该方法将返回此myFirstSuggestion字符串。

现在:如何触发它?似乎AutoCompleteTextView已经实现了这个监听器:

  

onFilterComplete(int count)

     

通知过滤操作结束。

所以基本上要走的步骤是:

  1. AutoCompleteTextView
  2. 上声明此监听器
  3. 在内部,使用以下发货地址获取第一个建议:

    AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.your_actv_id);
    ListAdapter adapter = actv.getAdapter();
    String firstSuggestion = adapter.getFirstSuggestion();
    
  4. actv.setHint(firstSuggestion);

  5. 对于第二个问题,您需要覆盖onEditorAction方法,类似这样的

    actv.OnEditorActionListener enter = new actv.OnEditorActionListener() {
      public boolean onEditorAction(AutoCompleteTextView view, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_GO) {
          ListAdapter adapter = view.getAdapter();
          String firstSuggestion = adapter.getFirstSuggestion();
          view.setHint(firstSuggestion);
        }
        return true;
      }
    };
    

    免责声明也适用于后者,可能如果我以前的想法有效,也可以。