显示AutocompleteTextView中的所有项目而不写入文本

问题描述:

我有一个AutocompleteTextView,它工作正常。当我写一个单词时,它会显示相关的结果,但是我想显示所有项目而不用在AutocompleteTextView中编写任何单词。我怎样才能做到这一点。显示AutocompleteTextView中的所有项目而不写入文本

+0

尝试此链接代码可以帮助你... 。 http://stackoverflow.com/questions/15224027/custom-autocompletevview-li ke-facebook-comment-field-in-android/15247212#15247212 – 2013-03-21 10:33:17

+0

这不是我想要的实际解决方案。不管怎样,谢谢。 – androidcodehunter 2013-03-21 10:41:21

您需要延长AutoCompleteTextView,

“当阈值小于或等于0,1的阈值是 施用。”。

setThreshold

import android.content.Context; 
import android.graphics.Rect; 
import android.util.AttributeSet; 
import android.widget.AutoCompleteTextView; 

public class InstantAutoComplete extends AutoCompleteTextView { 

    public InstantAutoComplete(Context context) { 
     super(context); 
    } 

    public InstantAutoComplete(Context arg0, AttributeSet arg1) { 
     super(arg0, arg1); 
    } 

    public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) { 
     super(arg0, arg1, arg2); 
    } 

    @Override 
    public boolean enoughToFilter() { 
     return true; 
    } 

    @Override 
    protected void onFocusChanged(boolean focused, int direction, 
      Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     if (focused) { 
      performFiltering(getText(), 0); 
     } 
    } 

} 

在XML

<AutoCompleteTextView ... /> to <your.namespace.InstantAutoComplete ... /> 

编辑1

创建一个名为InstantAutoComplete然后把这个代码到类新类。

在你的布局XML使用这个类像

然后找到你的actity此窗口小部件(onCreate方法)。

Look at this example

+0

但问题是我已经在该类中扩展了Activity,并且它是必需的。因此无法像解决方案一样扩展AutoCompleteTextView。有什么办法吗? – androidcodehunter 2013-03-21 10:40:06

+0

你不需要扩展你的活动,它是新的自定义自动完成textview,只需创建它并在你的布局中使用。请看编辑答案 – Talha 2013-03-21 10:46:04

+0

https://dl.dropbox.com/u/68130108/AutoComplateTextView。请看这个例子 – Talha 2013-03-21 10:53:47

更好的解决方案HERE

你并不需要自定义AutoCompleteTextView。相反,只需拨打autoCompleteTextView.showDropDown()当你需要它.....欢呼:)

+1

不幸的是,这并不总是奏效。我不确定为什么,但在某些设备上,当文本字段为空时,似乎忽略该命令。 – 2014-04-29 18:01:34

+0

您为它设置了任何阈值吗? – 2014-04-30 09:40:01

+0

是的,0我甚至事先调用requestFocus – 2014-04-30 12:40:20

它为我工作:

添加到您的对象下一个事件的方法:

myView.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) 
       myView.showDropDown(); 

     } 
    }); 

    myView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      myView.showDropDown(); 
      return false; 
     } 
    }); 
+1

我不认为你需要两个。不触及视图也会让它重点关注? – velocirabbit 2015-10-07 20:30:29

+0

你是对的,我认为OnTouchListener更好 – 2017-12-04 19:55:49

你需要调用requestFocus的( );显示键盘,否则键盘不会弹出。

方法强制显示下拉列表。

autocomptv.setOnTouchListener(new OnTouchListener() { 

     @SuppressLint("ClickableViewAccessibility") 
     @Override 
     public boolean onTouch(View paramView, MotionEvent paramMotionEvent) { 
      // TODO Auto-generated method stub 
      autocomptv.showDropDown(); 
      autocomptv.requestFocus(); 
      return false; 
     } 
    }); 

使用本:

text.setOnTouchListener(new View.OnTouchListener(){ 


      @Override 
      public boolean onTouch(View arg0, MotionEvent arg1) { 
       // TODO Auto-generated method stub 
       text.showDropDown(); 
       return false; 
      } 
      }); 

这对我的作品完美,这是解决问题的一个简单的方法:

final ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_dropdown_item_1line, usernameLists); 
etUsername.setThreshold(1); 
etUsername.setAdapter(adapter); 
etUsername.setOnTouchListener(new View.OnTouchListener() { 

    @SuppressLint("ClickableViewAccessibility") 
    @Override 
    public boolean onTouch(View paramView, MotionEvent paramMotionEvent) { 
     if (usernameLists.size() > 0) { 
       // show all suggestions 
       if (!etUsername.getText().toString().equals("")) 
        adapter.getFilter().filter(null); 
       etUsername.showDropDown(); 
      } 
     return false; 
    } 
});