Андроид 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);