Не изменяется текст в TextView

122
10 ноября 2019, 05:00

Подскажите пожалуйста, в чем может быть проблема: не заменяется текст в TextView (проверял, ID ресурсов не пересекаются):

public void updateUserName(TextView textView) {
    String str = textView.getText().toString();
    System.out.println("before_ " + str);
    textView.setText("my_name");
    str = textView.getText().toString();
    System.out.println("after_ " + str);
}

Путем вывода текстов в консоль, я выявил, что textView изменяет свое значение (т.е. getText возвращает "my_name"). Однако, в самом приложении изменений не происходит. Быть может, неправильный идентификатор ресурса TextView я передаю?

Я его получаю в LoginActivity в методе onCreate (src_name, src_email и src_avatar объявлены в начале класса LoginActivity как private TextView и private ViewImage):

NavigationView navigationView = findViewById(R.id.navigation_view); // получаем ID ресурса
src_name = navigationView.getHeaderView(0).findViewById(R.id.nav_drawer_header_username); // получаем ID имени
src_email = navigationView.getHeaderView(0).findViewById(R.id.nav_drawer_header_useremail); // получаем ID почты
src_avatar = navigationView.getHeaderView(0).findViewById(R.id.nav_drawer_header_useravatar); // получаем ID аватара

Затем передаю в функцию создания пользователя (оттуда уже и вызывается первоначальный updateUserName с до сих пор передаваемыми аргументами src_name, src_email и src_avatar).

Answer 1

Одна из причин такого поведение - попытка изменения интерфейса из другого потока. Для корректной работы с некоторыми элементами и обновления содержимого можно использовать следующий код:

public  void UpdateUI() {
        try {
            ((Activity) this).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    /// code here...
                }
            });
        } catch (Exception ex) {
            Log.d("UI ERROR", ex.getMessage());
        }
    }

Если метод находится вне класса активити - передавайте так же ссылку и на неё. Ниже код вашей функции с изменениями

public void updateUserName(final TextView textView, Activity activity) {
        try {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    String str = textView.getText().toString();
                    System.out.println("before_ " + str);
                    textView.setText("my_name");
                    str = textView.getText().toString();
                    System.out.println("after_ " + str);
                }
            });
        } catch (Exception ex) {
            Log.d("UI ERROR", ex.getMessage());
        }
    }
READ ALSO
Проверить подписан на канал YouTube [закрыт]

Проверить подписан на канал YouTube [закрыт]

У меня есть приложение и в приложении есть игровые монеты, теперь, я хочу сделать, чтоб по кнопке предлагалось подписаться на канал в Yotube и за подписку...

134
Получить PID дочерних потоков в Java

Получить PID дочерних потоков в Java

Вступление: Есть консольное приложение (JRE16 !!!), в нем создается конфигурация для будующих дочерних потоков, в нем можно запускать дочерние...

157
Как исправить ошибку “Can't resolve symbol” в запросе HQL?

Как исправить ошибку “Can't resolve symbol” в запросе HQL?

Помогите исправить ошибку в следующем методе:

146
как написать свою реализацию serialization api

как написать свою реализацию serialization api

нужно сериализовать класс в виде массива байтов без "built-in serialization api" те

144