8

Я работаю над AutoCompleteTextView. Я получаю некоторые результаты, когда пользователи печатают в AutoCompleteTextView, и они обязательны для выбора. Но проблема в том, что выпадающее меню автоматически отклоняется при нажатии на любое место в srceen. Я хочу этого избежать. Есть ли способ достичь этого.Как ограничить раскрывающееся меню AutoCompleteTextView?

Спасибо.

+0

@Andreyua попробуйте это https://matalamaki.fi/2015/09/07/android-autocompletetextview-with-drop-down-always-visible-or-how-to-figure-your-way-with-internal- андроид-APIs /. Другой способ - вызвать 'autoTextView.showDropDown();' in 'onTouchEvent (событие MotionEvent)', однако это не прекрасный эффект :) – BNK

+0

вы можете сохранить переменную для отслеживания, если выпадающее меню видно или нет, и реализовать onTouchEvent в вашей деятельности , Если выпадающее меню видно, тогда верните true и не вызывайте super else call super. Может быть, это сработает, но это не очень хорошее решение –

ответ

0

попробуйте код ниже.

Я использую AutoCompleteText для автоматического завершения местоположения, в котором находится пользователь, locationList - это не что иное, как массив, который я написал в файле strings.xml, поэтому используйте свой собственный массив строк здесь.

locationList = res.getStringArray(R.array.ticketLocation); 

     ArrayAdapter<String> locationAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, locationList); 

     AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.txtCountries); 
     textView.setThreshold(1); 
     textView.setAdapter(locationAdapter); 
     textView.setValidator(new Validator()); 
     textView.setOnFocusChangeListener(new FocusListener()); 

     textView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       // TODO Auto-generated method stub 
       TextView ticketLocation = (TextView) view; 
       getTicketLocation = ticketLocation.getText().toString(); 
      } 
     }); 

и ниже код для подтверждения ввода текста в поле местоположения, fixText() метод предотвращения пользователя от ввода текста, который не существует в строке массива, например: если тип пользователя " Германия», которая не существует в списке массива строки, он будет заменен на„“, который является пустая строка внутри поля ввода EditText

class Validator implements AutoCompleteTextView.Validator { 

     @Override 
     public boolean isValid(CharSequence text) { 
      // Log.v("Test", "Checking if valid: " + text); 
      Arrays.sort(locationList); 
      if (Arrays.binarySearch(locationList, 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.txtCountries && !hasFocus) { 
       // Log.v("Test", "Performing validation"); 
       ((AutoCompleteTextView) v).performValidation(); 
      } 
     } 
    } 
0
private boolean setForceIgnoreOutsideTouchWithReflexion(boolean forceIgnoreOutsideTouch) { 
    try { 
     Method method = android.widget.AutoCompleteTextView.class.getMethod("setForceIgnoreOutsideTouch", boolean.class); 
     method.invoke(this, forceIgnoreOutsideTouch); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

только отражение в public class CustomAutoCompleteTextView extends AutoCompleteTextView, но - может быть, это не хорошее решение тоже

Смежные вопросы