EditText - 如何检测输入 3 个或更多字符并执行搜索
Posted
技术标签:
【中文标题】EditText - 如何检测输入 3 个或更多字符并执行搜索【英文标题】:EditText - How to detect typing 3 or more characters and perform search 【发布时间】:2021-08-29 05:11:56 【问题描述】:需要帮助。已经4天没有任何反应。 尝试进行 SQLite 数据库搜索。 如何使列表视图不立即显示,而仅在用户输入搜索查询时显示? 也就是说,来自数据库的数据没有被过滤,但是当用户输入请求时,匹配项出现在列表视图中。 提前非常感谢大家!`
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
userFilter = findViewById(R.id.userFilter);
listView = findViewById(R.id.listView);
final DatabaseAccessSmeta databaseAccessSmeta = DatabaseAccessSmeta.getInstance(this);
databaseAccessSmeta.open();
List<String> quotes = databaseAccessSmeta.Search();
databaseAccessSmeta.close();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.region_list, quotes);
this.listView.setAdapter(adapter);
adapter.getFilter().filter(userFilter.getText().toString());
userFilter.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)
adapter.getFilter().filter(s.toString());
);
`
【问题讨论】:
那么,你想要的是:用户按下回车键后,搜索就会加载,对吧? 【参考方案1】:如果您只想在用户按下回车键/搜索键后加载结果,则无需添加TextWatcher
,只需添加EditorActionListener:
/* Adding action listener for handling search click */
userFilter.setOnEditorActionListener((v, actionId, event) ->
if (actionId == EditorInfo.IME_ACTION_SEARCH)
// Hiding keyboard
userFilter.clearFocus();
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (in != null)
in.hideSoftInputFromWindow(userFilter.getWindowToken(), 0);
// Initiate search
adapter.getFilter().filter(userFilter.getText().toString());
return true;
return false;
);
同样在您的 xml 中,将 android:imeOptions="actionSearch"
添加到您的 EditText
。
编辑:
如果你想让它在输入 3 个字符后可见,那么你必须添加 TextWatcher
:
userFilter.addTextChangedListener(new TextWatcher()
public void afterTextChanged(Editable s)
String query = (s != null) ? s.toString() : "";
if (query.length() >= 3)
listView.setVisibility(View.VISIBLE);
adapter.getFilter().filter(query);
else
// Either set an empty list or change visibility
listView.setVisibility(View.INVISIBLE);
adapter.getFilter().filter("");
public void beforeTextChanged(CharSequence s, int start, int count, int after)
public void onTextChanged(CharSequence s, int start, int before, int count)
);
【讨论】:
非常感谢。如何进行实时搜索?以便选项实时出现在列表视图中?问题是列表立即显示,输入被过滤后。我需要列表不可见并在输入 3 个字母后出现。 对于该功能,您可以添加一个 TextWatcher,并在其afterTextChanged()
中检查其长度是否 >= 3,并根据它设置您的列表视图可见/不可见。
谢谢。你帮了我很多。我想这就是我需要的。抱歉,您能否举一个代码示例。再次感谢!以上是关于EditText - 如何检测输入 3 个或更多字符并执行搜索的主要内容,如果未能解决你的问题,请参考以下文章
将 iOS 中的 UIlabel 文本字段限制为两个字符,输入 3 个或更多时重置