Андроид TextView setText не работает

Я знаю, что существует много подобных потоков, но я прошел через них и до сих пор не могу понять проблему. Моя программа достигает Handler, но всегда возвращает исключение catch. Сообщение не обрабатывается.

Я объявил TextView private TextView chatbox;

В onCreate у меня есть:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setUpViews();
        setUpListener();
    }

где фрагмент setUpViews() выглядит следующим образом:

 private void setUpViews() {
    chatbox = (TextView) findViewById(R.id.chatbox);
    }

Handler:

public Handler mHandler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg){
            try{
                chatbox.setText("Got it!");
            }catch(Exception e){
                Log.i("MYLOG", "Message was not handled.");
            }

        }
    };

Снимок в файле main.xml:

<TextView
        android:id="@+id/chatbox"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

Ответ 1

Если кто-то из бедных душ Гугл после этого вопроса в будущем, я, наконец, узнал об этом. У меня было несколько фрагментов, по одному для каждой вкладки в моем ViewPager, где TextView имел один и тот же идентификатор в двух фрагментах и ​​поэтому попал в конфликт. Я не понимал, что у меня такой же идентификатор, поэтому все казалось прекрасным, никаких сообщений об ошибке, но текст просто не изменился. Просто измените идентификатор.

Ответ 2

Вы не дали нам многого для продолжения.

Вы должны посмотреть трассировку стека исключений, вместо того, чтобы печатать сообщение на консоли: e.printStackTrace();

Но отсюда, если бы я должен был догадаться, похоже, что вы либо устанавливаете текст TextView из основного потока, либо - и который кажется маловероятным на основе того, что вы опубликовали, - ваш TextView не был установлен и у вас есть исключение с нулевым указателем.

Ответ 3

Я надеюсь, что ваш обработчик работает в потоке пользовательского интерфейса. Также попробуйте сделать это: присвойте свою строку переменной и используйте эту переменную, поскольку она требует charsequence.

String temp = "Got it!";
chatbox.setText(temp);

Ответ 4

как это хорошо!

private void setUpViews() {
    chatbox = (TextView) findViewById(R.id.chatbox);
    chatbox.setText("Got it!");
}

Ответ 5

В моем случае
Я обнаружил, что есть TextWatcher и Filter связанный с моим Textview
Которые оба содержат логику, препятствующую обновлению моего значения Textview
Так в дополнение к другим решениям
Вы можете проверить, связано ли ваше Textview с каким-либо TextWatcher или Filter затем проследить его.

Ответ 6

отправить сообщение? например:

            Message message=new Message();
        message.what=1;
        mHandler.sendMessage(message);