Comunicación entre vistas personalizadas de SurfaceView y de android por defecto
Mi problema es la comunicación entre el GameView de encargo (extiende SurfaceView) y TextView: Quiero fijar el texto de TextView de dentro del GameView. En la actividad principal estoy utilizando este archivo de diseño, debe explicar la estructura de mi aplicación:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00ff00" > <TextView android:id="@+id/scoreTV" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="score: 0" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="back" android:layout_alignParentRight="true" /> </RelativeLayout> <org.gk.grApp.GameView android:id="@+id/gameplayScreen" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
No puedo cambiar el texto de TextView en mi objeto GameView, porque es imposible tocar el subproceso de UI desde otro. Handler no funciona demasiado, porque no puedo dar referencia a un manipulador al constructor de GameView, que se realiza después de cargar este archivo xml (una lectura sobre el constructor por defecto para los archivos xml, por ejemplo, aquí ¿Cómo puedo utilizar GLSurfaceView en un LinearLayout junto con otros Vistas, como TextView o botón? ). ¿Tienes idea de lo que debo hacer ahora? Tal vez mi deducción es incorrecta, así que por favor, cuéntame sobre esto.
- Diferencia entre Thread y Handler
- ¿Cómo ejecutar mi código en el hilo específico?
- Cómo matar un hilo y un controlador antes de ir a una nueva actividad
- No se puede entender mHandler.obtainMessage () en la muestra Bluetooth de Android
- Controlador de Android para activar el hilo
EDIT: He cambiado mi archivo xml, en lugar de GameView Tengo ahora:
<LinearLayout android:id="@+id/gameplayScreen" android:layout_width="fill_parent" android:layout_height="fill_parent" > </LinearLayout>
También agregué un argumento (tercero) en la firma del constructor:
public GameView(Context context, AttributeSet as, Handler h) { ... }
Y cambió mi onCreate en GameplayActivity:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gameplay); LinearLayout ll = (LinearLayout)findViewById(R.id.gameplayScreen); GV = new GameView(this, null, scoreHandler); ll.addView(GV); }
Funciona, ahora puedo configurar el texto de TextView, pero después de hacer clic en el botón Atrás se genera otra excepción: "Realizar pausa de actividad que no se reanuda: {org.gk.grApp / org.gk.grApp.MainMenuActivity}". Acabo de empezar a buscar información sobre esto.
- CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vistas puede tocar vistas
- Android runOnUiThread / AsyncTask no puede resolver CalledFromWrongThreadException
- Cómo administrar Loopers y Threads (el hilo no muere más!)
- ¿Cuál es la diferencia entre un hilo y un manejador
- Actualización de contenido de ScrollView
- Ejecutar mensajes del controlador en un subproceso de fondo
- ¿Qué es más eficiente Broadcast Receiver o Handler?
- Android: TimerTask programado para la repetición de ser despedido sólo una vez
Primero haga una referencia al TextView en el nivel de actividad:
TextView txv;
En onCreate, asigne esta referencia:
Txv = (TextView) findViewById (R.id.MyTextView);
A continuación, haga un método en su actividad después de onCreate como esto:
public void setTextView(final String txt){ MyActivity.this.runOnUiThread(new Runnable() { public void run() { txv.setText(txt); } }); }
A continuación, realiza una llamada desde su vista personalizada:
((MiActividad) getContext ()). SetTextView (str);
- Problemas con ORMLite y colecciones perezosas
- Android: Error al entregar el resultado ResultInfo {who = null, request = 1, result = -1, data = Intent