После использования RequestFocus () поле EditText ведет себя как отключенное - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть поле EditText, где пользователь вводит местоположение инвентаря.Если местоположение недействительно, появляется описание ошибки (т. Е. «Местоположение не найдено»), после чего пользователь должен снова нажать поле, чтобы попробовать другое местоположение.

Я пытаюсь использовать RequestFocus ()так что пользователю не нужно нажимать еще раз, прежде чем войти в другое место. кажется для работы.Поле EditText становится подчеркнутым, и курсор мигает в начале, но ничего нельзя ввести.Это как если бы поле было отключено, но отладка показывает, что оно включено и HasFocus.Фактически, это единственный включенный EditText.

 <EditText
    p1:layout_width="150dp"
    p1:layout_height="33dp"
    p1:layout_below="@id/spnrAreas"
    p1:id="@+id/etxtLocation"
    p1:layout_toRightOf="@id/lblLocation"
    p1:textColor="@color/Black"
    p1:inputType="textCapCharacters"
    p1:nextFocusDown="@+id/etxtItem" />

                       {txtErrorMessage.Text = "Location not found";
                        etxtLocation.Text = "";
                        etxtLocation.RequestFocus(); 
                        return; }

Есть ли метод, отличный от RequestFocus (), который заставил бы программу вести себя так, как если бы был нажат EditText (etxtLocation)?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Мне удалось решить эту проблему, переместив функцию etxtLocation.RequestFocus () в обработчик событий FocusIhange () extItem, в котором фокус сместился после нажатия клавиши ввода.Оттуда он ведет себя как задумано:

        void etxtItem_FocusChange(object sender, View.FocusChangeEventArgs e)
    {
        if (etxtItem.HasFocus)
        {
            //request focus back to Location if its value was incorrect.
            if (String.IsNullOrEmpty(etxtLocation.Text))
           {
                etxtLocation.RequestFocus();
            }  } } return;
0 голосов
/ 01 февраля 2019

Попробуйте это:

etxtLocation.RequestFocus(); 
InputMethodManager imm = (InputMethodManager) GetSystemService(Context.InputMethodService);  
imm.ShowSoftInput(etxtLocation, ShowFlags.Implicit);
...