Почему я не могу стереть текст в EditText, работающем внутри обработчика?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему я не могу стереть текст в EditText, работающем внутри обработчика?

Сообщение Anonymous »

Вот мой код в действии (уровень API 30):

Код: Выделить всё

EditText loggerText;
final Handler handlerLogger = new Handler(Looper.getMainLooper());
final int delayHandlerLogger = 200;

public void syncSongs() {
handlerLogger.removeCallbacksAndMessages(null);
loggerText.setText("");
loggerText.post(this::processLogger);
}

public void processLogger() {
handlerLogger.postDelayed(new Runnable() {
public void run() {
if (!isQueueEmpty()) {
String loggerLine = getQueueLastString;
String textCheck = loggerText.getText().toString();
loggerText.append(loggerLine + "\n");
}
handlerLogger.postDelayed(this, delayHandlerLogger);
}
}, delayHandlerLogger);
}
Когда я вызываю syncSongs() из общедоступного логического метода onOptionsItemSelected(@NonNull MenuItem item) (который должен стирать текст с помощью setText("") перед публикацией), первый раз, когда он входит в оператор if (!isQueueEmpty()) {, textCheck (т. е. текст из loggerText, который должен быть пустым из-за setText(" ")) не "".
Почему? Я что-то упускаю? Что не так с этим асинхронным процессом?
Кажется, loggerText Это дублирующийся объект в Runnable, потому что, когда я переключаю Activity и проверяю его на Resume/onStart, текст пусто, а внутри Runnable остается добавленный текст на предыдущей итерации (невозможно получить это).

Подробнее здесь: https://stackoverflow.com/questions/783 ... an-handler
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»