Android, Autocomplettextview, текст силы из списка записей

Есть ли способ заставить запись в autocompletetextview быть одним из элементов в списке входа?

Я нашел метод под названием «performValidation», но я не уверен, что он на самом деле делает, и я не смог найти много документации или каких-либо примеров.

Solutions Collecting From Web of "Android, Autocomplettextview, текст силы из списка записей"

AutoCompleteTextView имеет метод, называемый setValidator() который принимает экземпляр интерфейса AutoCompleteTextView.Validator качестве параметра. AutoCompleteTextView.Validator содержит isValid() с помощью которого вы можете проверить введенное значение, и вы можете «исправить» эту строку, реализовав fixText() .

Похоже, это лучшее, что вы можете получить с помощью AutoCompleteTextView , поскольку в документации для AutoCompleteTextView.Validator указано следующее:

«Поскольку нет надежного способа предотвратить выход пользователя из этого представления с неправильным значением в нем, все, что мы можем сделать, это попытаться исправить его сами, когда это произойдет».

Если ваш список элементов не слишком длинный, вам, вероятно, лучше использовать Spinner.

****** Редактировать: ******

Я собрал быстрый пример того, как вы можете это использовать, надеюсь, что это поможет!

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <AutoCompleteTextView android:id="@+id/input" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Focus me to validate above text"/> </LinearLayout> 

 public class AutoCompleteTextViewActivity extends Activity { String[] validWords = new String[]{"", "snowboard", "bobsleigh", "slalom"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); AutoCompleteTextView view = (AutoCompleteTextView)findViewById(R.id.input); view.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, validWords)); view.setValidator(new Validator()); view.setOnFocusChangeListener(new FocusListener()); } class Validator implements AutoCompleteTextView.Validator { @Override public boolean isValid(CharSequence text) { Log.v("Test", "Checking if valid: "+ text); Arrays.sort(validWords); if (Arrays.binarySearch(validWords, text.toString()) > 0) { return true; } return false; } @Override public CharSequence fixText(CharSequence invalidText) { Log.v("Test", "Returning fixed text"); /* I'm just returning an empty string here, so the field will be blanked, * but you could put any kind of action here, like popping up a dialog? * * Whatever value you return here must be in the list of valid words. */ return ""; } } class FocusListener implements View.OnFocusChangeListener { @Override public void onFocusChange(View v, boolean hasFocus) { Log.v("Test", "Focus changed"); if (v.getId() == R.id.input && !hasFocus) { Log.v("Test", "Performing validation"); ((AutoCompleteTextView)v).performValidation(); } } } } 

Не комментируйте себя, здесь я дал простой код для проверки AutoCompleteTextview

  String str = clientName.getText().toString(); ListAdapter listAdapter = clientName.getAdapter(); for(int i = 0; i < listAdapter .getCount(); i++) { String temp = listAdapter .getItem(i).toString(); if(str.compareTo(temp ) == 0) { return; } } 

Для получения дополнительной информации нажмите здесь

Другой альтернативный способ (комментарии упоминаются в строке):

 AutoCompleteTextView txt_site_name = findViewById(R.id.some_auto_text); // Get the string array for the countries String[] countries = getResources().getStringArray(R.array.ncr_parking_list_array); // Create the adapter and set it to the AutoCompleteTextView ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line, countries); // txt_site_name is name of the AutoComplete text view. or AutoCompleteTextView txt_site_name txt_site_name.setAdapter(adapter); txt_site_name.setValidator(new AutoCompleteTextView.Validator() { @Override public boolean isValid (CharSequence text){ //some logic here returns true or false based on if the text is validated if(text== "This is what I want) {return true;} else {return true;} } @Override public CharSequence fixText (CharSequence invalidText){ //If .isValid() returns false then the code comes here //do whatever way you want to fix in the users input and return it return "This is what I want" } }); 

Ссылка: AutoCompleteTextView.Validator