#android
#Android
Вопрос:
Каждый раз, когда вводится основное действие, приведенный ниже код будет выполняться и будет работать нормально (это означает indexStatus.setText(msg.obj.toString());
, что всегда отображается последнее сообщение об ошибке).
Но если я нажму back
кнопку для выключения, а затем переключусь на тот же экран ( reBuildIndex
снова запустится), Log.d(TAG, msg.obj.toString());
все работает нормально, распечатайте последнюю сообщение, но indexStatus.setText
не работает, последняя сообщение отображается не так, как я ожидал.
Что здесь происходит? Есть предложения?
void rebuildIndex(boolean reCreate) {
final TextView indexStatus = (TextView) this.findViewById(R.id.index_status);
indexStatus.setVisibility(View.INVISIBLE);
indexStatus.setText(R.string.rebuild_index_progress_title);
final Handler statusHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.obj == null) {
indexStatus.setVisibility(View.GONE);
} else if (msg.obj.equals("show")) { // TODO quick demo, shouldn't use literal text.
indexStatus.setVisibility(View.VISIBLE);
} else {
Log.d(TAG, msg.obj.toString());
if (indexStatus.getVisibility() != View.VISIBLE) {
indexStatus.setVisibility(View.VISIBLE);
}
indexStatus.setText(msg.obj.toString());
indexStatus.invalidate();
}
return false;
}
});
Indexer.rebuildIndexIfNecessary(statusHandler, reCreate);
}
Обновить:
Я добавил indexStatus.invalidate();
after setText
в третье условие, тоже не работает.
ОБНОВЛЕНИЕ: неправильное сообщение в исходном сообщении, я сказал нажать home
, но на самом деле его back
отключить. home
кнопка включения / выключения работает нормально.
ОБНОВЛЕНИЕ: попытался поместить обработчик в качестве глобальной переменной, но не сработало. Теперь я отключил back
событие.
Комментарии:
1. Это интересно. Могу ли я узнать, что вы видите (сообщение), когда оно работает не так, как ожидалось?
2. Можете ли вы дать немного больше информации о том, где
rebuildIndex()
снова вызывается? Это отonResume()
? что на самом деле запускает метод и что запускает thehandleMessage()
изHandler
?3.
rebuildIndex
вызывается изonStart
действия, а сообщение является обычным литераломString
4. @LightYearsBehind вообще ничего не отображается, кажется, что представление вообще не отображается
5. Мне кажется, что регистр «else» не вызывается, но вы сказали
Log.d(...)
, что работает.. Я полагаю, вы не звонилиLog.d(...)
в другое место?
Ответ №1:
Если TextView должен быть всегда установлен видимым в этой части кода:
if (indexStatus.getVisibility() != View.VISIBLE) {
indexStatus.setVisibility(View.VISIBLE);
}
затем удалите if
часть.