Intereting Posts
Как реализовать нижнюю навигационную вкладку в соответствии с новым руководством Google Android Sqlite получить последний идентификатор строки строки MediaStore – Uri для запроса всех типов файлов (носителей и носителей) Не удается разрешить метод 'add (int, com.example.utkarsh.beatle.app.MainActivity.PlaceholderFragment) Пакет совместимости Android – фрагмент … не привязан к работе Почему предупреждение: невозможно найти дополнительную библиотеку: org.apache.http.legacy происходит? AVD Невозможно протестировать любое приложение с помощью AVD Multi-touch кросс-платформенный Java-приложение (Windows, Mac и Linux (Ubuntu) (возможно, Android)) Зачем использовать «обычные» фрагменты, если у вас есть пакет совместимости с Android? Android: Исправлен шрифт ширины в AlertDialog Какова концептуальная разница между датчиком вектора вращения и датчиком ориентации в Android? Как программно изменить контрастность растрового изображения в андроиде? Как иметь несколько экземпляров службы на Android Переопределить макет xml из фреймворка android Показать диалог вращающегося колеса при загрузке данных на Android

Сделайте некоторые элементы Android UI в потоке, отличном от UI

Есть ли способ сделать изменения пользовательского интерфейса в потоке, отличном от UI? Короткий вопрос.

Solutions Collecting From Web of "Сделайте некоторые элементы Android UI в потоке, отличном от UI"

Если вы не хотите использовать AsyncTask, попробуйте шаблон наблюдателя с внутренним классом (ResponseHandler) в своем основном действии, извините, я не смог получить форматирование правильно, но я уверен, что вы получите идею

public class WorkerThread extends Observable implements Runnable { public void run() { try { DoSomething(); String response = "Doing something"; setChanged(); notifyObservers( response ); DoSomethingElse(); String response = "Doing something else"; setChanged(); notifyObservers( response ); } catch (IOException e) { e.printStackTrace(); } } private void DoSomething(){ } private void DoSomethingElse(){ } public class MainActivity{ public class ResponseHandler implements Observer { private String resp; public void update (Observable obj, Object arg) { if (arg instanceof String) { resp = (String) arg; //Write message to UI here ie System.out.println("\nReceived Response: "+ resp ); //or EditText et = (EditText)findViewById(R.id.blah); // blah.SetText(resp); } } } private void doStuffAndReportToUI(){ final WorkerThread wt = new WorkerThread(); final ResponseHandler respHandler = new ResponseHandler(); wt.addObserver( respHandler ); Thread thread = new Thread(wt); thread.start(); } 

Либо используйте Обработчик, либо используйте ниже код

  runOnUiThread(new Runnable() { @Override public void run() { // Ui Stuff here } }); 

Есть много способов сделать это, использовать AsyncTask или Threads . Короткий ответ.

Подсказка: материал пользовательского интерфейса может быть выполнен в классе pre-postExecute / runOnUiThread / Handler

Проверьте класс Handler . Или взгляните на эти похожие вопросы:

Обновить пользовательский интерфейс из потока

Обработка кода пользовательского интерфейса из потока

Обновление ui из потока с помощью audiotrack

Я попробовал + tmho ответить, но он все еще дает эту ошибку:

E / AndroidRuntime (****): android.view.ViewRootImpl $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может коснуться его представлений.

Я, наконец, заканчиваю комбинацию с + ingsaurabh способом, например:

 private class ResponseHandler implements Observer, Runnable { Activity act; public ResponseHandler(Activity caller) { act = caller; } @Override public void update (Observable obj, Object arg) { act.runOnUiThread(this); } @Override public void run() { //update UI here } } 

Спасибо вам обоим.