¿Cómo textView.setText de hilo?

Necesito fijar el texto al textView del hilo. Todo el código se crea en oncreate ()

algo como

public TextView pc; oncreate(..) { setContentView(R.layout.main); pc = new TextView(context); Thread t =new Thread() { public void run() { pc.setText("test"); }}; t.start(); 

Esto bloquea mi aplicación. ¿Cómo puedo establecer el texto del hilo?

Utilice un controlador :

 public TextView pc; Handler handler = new Handler(); oncreate(..) { setContentView(R.layout.main); pc = new TextView(context); Thread t =new Thread(){ public void run() { handler.post(new Runnable() { public void run() { pc.setText("test"); } }); } }}; t.start(); } 

Pero tienes otro problema. pc apunta a una vista que no es parte de su jerarquía. Es probable que desee utilizar findViewById con el ID del TextView en su diseño.

Intente Activity.runOnUiThread() .

 Thread t = new Thread() { public void run() { runOnUiThread(new Runnable() { @Override public void run() { pc.setText("test"); } }); } }; 

Usando Android Data Binding Library puedes hacer esto fácil

Hilo de fondo

Puede cambiar su modelo de datos en un subproceso de fondo siempre y cuando no sea una colección. El enlace de datos localizará cada variable / campo mientras se evalúa para evitar cualquier problema de concurrencia.

Por ejemplo

ViewModel.java

 package somepackage; public class ViewModel { public final ObservableField<String> mTextViewField = new ObservableField<>(); public void setText(String text) { mTextViewField.set(text) } } 

Main.xml

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="viewModel" type="somepackage.ViewModel" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{viewModel.mTextViewField}" /> </FrameLayout> </layout> 

MainActivity.java

 public class MainActivity { private ViewModel mViewModel; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { MainBinding binding = DataBindingUtil.setContentView(this, R.layout.main); mViewModel = new ViewModel(); binding.setViewModel(viewModel); } } 

Ahora puede dirigirse al mViewModel desde cualquier Thread y cambiar el valor de texto de forma segura

  • Cómo configurar la imagen de Url usando AsyncTask?
  • Android- Thread.join () hace que la aplicación se bloquee
  • El número de hilos activos sigue aumentando
  • Cómo esperar a que Android runOnUiThread para ser terminado?
  • Dormir un hilo hasta que un evento sea asistido en otro hilo
  • Hilo con estados personalizados
  • Inicio de un runnable en el hilo de fondo
  • Cómo tener múltiples conexiones a un solo dispositivo bluetooth Obd2 conectado al coche
  • ¿Los hilos añaden mucha sobrecarga a una aplicación?
  • ¿Hay RxJava equivalente a Handler.postDelayed (Runnable r, delayMillis largo)
  • ¿Cómo puedo mantener vivo un hilo de conexión? (¿Necesito usar un daemon?)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.