Невозможно сфокусироваться на последнем EditText

У меня есть ScrollView, который имеет линейный макет, Когда я создаю и добавляю EditText программно в макет, мой код должен прокручиваться вниз, но затем фокус переходит на второе снизу поле вместо того, что я хочу, чтобы он фокусировал нижнее поле, и я могу '' Не понимаю, почему.

Вот код:

public void addPlayer(View view){
    ScrollView scrollview = (ScrollView) findViewById(R.id.PlayerAddScroll);
    EditText tv = new EditText(this);
    tv.setHint("Player " + (playerCount + 1));
    playerCount++;
    tv.setSingleLine(true);
    LinearLayout playerListView = (LinearLayout) findViewById(R.id.playerListView);
    playerListView.addView(tv);
    playerFields.add(tv);
    scrollview.post(scrollBottom);
}

Это то, что делает scrollBottom

Runnable scrollBottom=new Runnable() {
    @Override
    public void run() {
        ScrollView scrollView = (ScrollView) findViewById(R.id.PlayerAddScroll);
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
};

Мой код вызывает это (не фокусируясь на последнем поле):

Невозможно сфокусироваться на последнем EditText

tv.requestFocus() - stackoverflow.com/questions/8077755/edittext-request-focus
Pavlus 03.06.2018 18:52

@Pavlus Я пробовал это после scrollview.fullScroll (), но ничего не сделал ...

Troy Swan 03.06.2018 23:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
77
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Нашел исправление, добавив android:paddingBottom = "5dp" в мой LinearLayout в XML.

Ответ принят как подходящий

измените свой код вот так, и он будет работать нормально!

    Runnable scrollBottom = new Runnable() {
    @Override
    public void run() { 
        //This linear is the linearLayout which you added your textView to it 
        LinearLayout playerListView = (LinearLayout) findViewById(R.id.ll);
        playerListView.getChildAt(playerListView.getChildCount()-1).requestFocus();

    }
};

Я попытался динамически запросить фокус для последнего EditText после метода fullScroll. код находится в Runnable scrollBottom

ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
EditText editText = (EditText) linearLayout.getChildAt(linearLayout.getChildCount() - 1);
        editText.requestFocus();

Другие вопросы по теме