Pregunta

Hola a todos gracias por ver esto. Realmente no puedo entender por qué sucede esto, aunque podría tener algo que ver con mi hilo de fondo que es procesar audioInput. Todo funciona bien hasta que incliné el teléfono, aún no he puesto un retrato de paisaje o cosas así. Por lo tanto, debería estirar automáticamente mi diseño de retrato. Pero simplemente lo estira, también restablece mi etiqueta y me hace incapaz de usar mis funciones de SetText en ellas. También noté que detiene mi hilo de fondo. Aquí hay código para establecer las vistas text:

private void reactOnAudioMessage(Message msg) {
    TextView txtVwLastValue = (TextView) findViewById(R.id.txtVwLastValue);
    String result=null;
    DataFile newData=null;
    Bundle bndl=msg.getData();
    // ** newData getting created, with the correcy value etc this is not the problem.
    if(newData!=null){
        txtVwLastValue.setText("Last Value Received:" +newData.getValue());
        mDataList.add(newData);
        drawGraph(mImageView);
    } 
}

Aquí está mi archivo XML

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Record"
android:id="@+id/btnRecord">
</Button>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Last Value Received:" android:id="@+id/txtVwLastValue"></TextView>
<TextView android:text="TextView" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/txtVwType"></TextView>
<ImageView android:src="@drawable/icon" android:layout_width="fill_parent" android:id="@+id/imgViewGraph" android:layout_height="300px"></ImageView>
</LinearLayout>
¿Fue útil?

Solución

So it should automatic just stretch my portrait layout.

Esto no es del todo cierto, como también has visto. El comportamiento esperado para un cambio de orientación no controlado es recrear la actividad (lo que significa pasar por todo el ciclo de vida de la actividad, OnDestroy (), OnCreate (), etc. obviamente, obviamente la razón por la que se está restableciendo su etiqueta). Esto se puede manejar de varias maneras:

http://developer.android.com/guide/topics/resources/runtime-changes.html & http://developer.android.com/resources/articles/faster-screen-orientation-change.html

"Manejo" los cambios de orientación de 2 formas bastante simples en mi aplicación. Una actividad está bloqueada en el retrato (ya que no tiene sentido verlo en el paisaje) estableciendo el indicador de screyientation en el manifiesto:

<activity android:name=".SettingsActivity" android:screenOrientation="portrait">

La segunda actividad que uso debe verse en ambos sentidos, ya que contiene un gráfico que se ve mejor cuando se ve en el paisaje. Básicamente, esto significa que me aseguro de que mi actividad se cierre con gracia (incluidos los hilos o manejadores que uso) y se rehace para dibujar el gráfico que llena la pantalla en la orientación del paisaje.

Debe pensar en cómo desea manejar el cambio de orientación. ¿Qué tiene más sentido en su aplicación? Hay muchos buenos recursos en torno a que habla sobre los cambios de orientación a través de Google.

Me imagino que el problema que tienes con el hilo de fondo se debe a los controladores que tienes en la actividad que se destruye y rehace.

Otros consejos

Cuando se gira el dispositivo, destruye y recreota efectivamente su actividad en la nueva orientación. Si está iniciando su hilo como parte de su actividad, eso explicaría parte del comportamiento que está viendo. Si desea que su hilo sobreviva entre las dos instancias de actividad, entonces deberá implementarlo como un servicio en lugar de un hilo simple.

La forma de demostrar esto es establecer un punto de interrupción o agregar un poco de registro en su método OnCreate, y verá que esto se presenta tanto cuando la aplicación se inicia como la actividad se muestra por primera vez, y en las rotaciones del dispositivo.

Cada vez que inclina su teléfono, es decir, cada vez que cambia entre el modo de retrato y el modo de paisaje, la actividad se reinicia, por lo tanto onCreate() es ejecutado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top