我已經提供了一個自動完成的文本視圖來向用戶顯示建議。基於用戶選擇的項目,我得到項目的ID並在數據庫側使用它。現在我的問題是限制用戶僅從自動完成textview中進行選擇(即用戶不應輸入他自己的文本)。這是客戶的要求。這個怎麼做?Android:限制用戶只從自動完成文本視圖中選擇
回答
這裏是一個非常簡單的解決方案:
您可以創建一個變量,通過設置setOnItemClickListener
存儲選定值您的AutoCompleteTextView
。然後你可以null
,只要用戶在該字段中輸入TextWatcher
即可。最後,你可以在繼續之前驗證你的變量是否爲空。
String my_var; //keep track!
AutoCompleteTextView tv = (AutoCompleteTextView) layout.findViewById(R.id.tv);
tv.setAdapter(my_adapter);
tv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
my_var = my_adapter.getItem(position).toString();
}
});
/**
* Unset the var whenever the user types. Validation will
* then fail. This is how we enforce selecting from the list.
*/
tv.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
my_var = null;
}
@Override
public void afterTextChanged(Editable s) {}
});
但如果用戶輸入的值出現在列表中,my_var不應該爲空! – dvrm
@dvrm然後您需要在適配器中搜索用戶輸入的文本,然後從每個onTextChanged上的適配器中選擇值。因此,假設用戶在actv中輸入'name',然後搜索'n','na','nam','name',當您找到匹配項時,請選擇該值。這樣,無論他們是否點擊它,列表中的項目都會被選中,只要文字符合 – regretoverflow
的精彩應用。謝謝。 –
好吧我假設你想限制用戶對建議框中列出的項目列表中包含的文本的輸入。
例如,如果您有:
- 一個
- 兩個
- 三
那麼用戶只能鍵入的第一個字符 「O」 和 「T」。 依據之前輸入的文字等。
要做到這一點,你可以利用setFilters方法TextView的:
editBox = (TextView) findViewById(R.id.editBox);
editBox.setFilters(getFilters());
editBox.addTextChangedListener(this);
editBox.setOnFocusChangeListener(this);
另外,你可能會需要文本變化監聽和焦點監聽反應和更新過濾列表當輸入一個新字符...加上更新過濾器。
下面是我在一個項目中使用的十進制數字濾波器的例子:
protected InputFilter[] getFilters()
{
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter()
{
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
// limit input to digits and decimal/thousand separator only
// in case thousand separator is pressed, change it to decimal
// separator instead
String output = "";
if (number.isFocused())
{
for (int i = start; i < end; i++)
{
char c = source.charAt(i);
if (isDecimalOrThousandSeparator(c))
{
output = output + Character.toString(decimalSeparator);
}
else if (Character.isDigit(c))
{
output = output + Character.toString(c);
}
}
return output == "" ? null : output;
}
return null;
}
};
return filters;
}
我碰巧需要這樣一個項目,我正在努力的要求,我儘管我會分享你們我實施所需的方式。
我爲自動完成文本視圖添加了焦點更改偵聽器,並在用戶將焦點從自動完成更改爲焦點時進行檢查,並且直接處理了這種情況。
autoTextViewCountry.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if(!b) {
// on focus off
String str = autoTextViewCountry.getText().toString();
ListAdapter listAdapter = autoTextViewCountry.getAdapter();
for(int i = 0; i < listAdapter.getCount(); i++) {
String temp = listAdapter.getItem(i).toString();
if(str.compareTo(temp) == 0) {
return;
}
}
autoTextViewCountry.setText("");
}
}
});
所以我的實現是:如果輸入的文本不會在陣列適配器繼續說登記的下一個階段,當上存在然後重點變成空的文本視圖,後來,檢查這個文本視圖是空的還是不空的。
希望這種方法可以幫助某人。
快樂編碼。
NiceAutoCompleteTextView會給你檢查通過調用isSelectionFromPopup()
- 1. Liferay AUI自動完成限制選擇
- 2. 強制用戶從自動完成中選擇
- 3. 如何強制用戶只從自動完成彈出框中選擇值
- 4. 如何避免從自動完成文本視圖中選擇最後一項
- 5. 如何限制用戶只從圖庫中選擇JPG圖像?
- 6. Android - 從自動完成文本視圖中識別所選項目
- 7. 自動完成文本視圖 - 僅選擇特定文本而不是整個
- 8. 自動完成文本視圖
- 9. 自動完成文本視圖錯誤
- 10. 多個自動完成文本視圖
- 11. 無法從自動完成文本框中選擇值
- 12. 覆蓋android自動完成文本視圖中的filterresults?
- 13. Android自定義自動完成文本視圖
- 14. 從自動完成中選擇事件
- 15. jqueryui自動完成限制多選
- 16. 如何在自動完成文本視圖中選擇多個聯繫人
- 17. 從自動完成文本視圖中的onitemselect獲取值
- 18. 強制用戶只選擇自動完成文本框中的集合的結果
- 19. Jquery自動完成 - 只從列表中選擇sumbit表單
- 20. Kendo自動完成 - 強制用戶做出有效選擇
- 21. 自動完成強制選擇
- 22. Android中的自動完成(限制結果或禁用滾動)
- 23. JSON數組自動完成在android的文本視圖
- 24. Android自動完成文本視圖和可編輯微調
- 25. 類似Twitter的Android自動完成文本視圖
- 26. jQuery用戶界面自動完成:只允許選擇的從建議名單
- 27. 自動完成的選擇事件塊限制範圍?
- 28. 無法從JQuery自動完成選擇選項中選擇
- 29. android中的自動完成文本?
- 30. 根據另一個自動完成文本視圖的選擇自動設置文本
你的問題選擇是否從下拉彈出製作的能力,目前尚不清楚。你想限制哪個選擇/用戶可以在哪裏做出選擇? – stoilkov
你是否試圖限制用戶編輯textView ...所以他只能選擇自動完成選項中的一個項目? – Drejc
@Drejc是的,這就是我需要的 –