Android, Autocomplettextview, заставить текст быть из списка записей - PullRequest
14 голосов
/ 17 февраля 2011

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

Я нашел метод с именем "executeValidation", но я не уверен, что он на самом деле делает, и я не смог найти много документации или примеров.

Ответы [ 3 ]

22 голосов
/ 17 февраля 2011

У 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();
            }
        }
    }
}
1 голос
/ 05 июня 2016

Не усложняйте себя, вот фрагмент кода для проверки 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;
    }
}

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

0 голосов
/ 11 февраля 2015

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

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 false;
     }

     @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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...