2011-07-07 27 views
11

¿Cómo cambiar dinámicamente el contenido de un TextView desde otra parte de la pantalla?Cambiar el texto de otra actividad

tengo una clase TabActivity que dibuja una RelativeLayout que contiene una TextView seguida de una con varias pestañas. Dentro de cada pestaña hay un Intento separado. Desde uno de los intentos de tabulación, me gustaría cambiar el texto (a través de .setText) del TextView desde el TabActvity principal.

¿Esto es posible?

Respuesta

28

que puedes usar Android Architecture Components:

Se puede crear un ViewModel contiene LiveData de su objeto de datos (LiveData<String> en caso de que desee cambiar sólo texto).

Cuando cambie su objeto de datos en vivo desde un Activity o Fragment, todas las demás actividades y fragmentos que observen para este objeto de datos en tiempo real serán notificados.

Official API doc has complete example with description.

+3

Excepcional; funciona perfectamente. ¡¡Muchas gracias!! – ehymel

+4

Tenga cuidado de que esto cambie ese 'TextView' para cada instancia de esa clase en la pila. –

+5

"No coloque clases de contexto de Android en campos estáticos, esto es una pérdida de memoria (y también rompe la Ejecución instantánea)": ya no es una solución mejor. Obtendrá esta advertencia en Android Studio mientras lo convierte en estático. ¿Alguna mejor solución? –

6

Haz un método público en tu TabActivity que establece el texto de TextView, luego llama al getParent() desde la actividad secundaria, ejecútalo a tu clase TabActivity, luego llama a ese método público.

+0

Guau, esta es una gran idea, manteniendo todo en la clase TabActivity. Definitivamente probaré esto también. – ehymel

0

Puede intentar implementar un controlador para la pestaña primaria que hace el trabajo. Pase el texto en un objeto de mensaje de cada una de sus pestañas respectivas. Para estar seguro, realizar cambios dentro del controlador dentro de un bloque runOnUI

+1

Gracias ... en realidad pensé en eso y lo intenté, pero probablemente lo implementé incorrectamente. Buena sugerencia. – ehymel

0

En un caso de cambiar el texto del archivo AsyncTask, es necesario implementar una interfaz con un oyente. Ejemplo:

AsynctaskFile:

OnReadyListener onReadyListener; 

public class ABCAsynctaskFile{ 

    ... 

    onReadyListener.onReady(); 

} 

public interface OnReadyListener{ 

void onReady(); 

} 


public void setOnReadyListener(OnReadyListener onReadyListener){ 

this.onReadyListener = onReadyListener; 

} 

ActivityFile:

public class ABC extends AppCompactActivity implements ABCAsynctaskFile.OnReadyListener{ 
    .. 

    ABCAsynctaskFile aBCAsynctaskFileObj = new ABCAsynctaskFile(context); 

    aBCAsynctaskFile.setOnReadyListener(ABC.this) 

} 

@Override 

public void onReady(){ 

    // Your wished changed in edit text. 

} 

Esta estructura le ayudará a prevenir la excepción de puntero nulo.

Cuestiones relacionadas