2011-11-01 11 views

Respuesta

18

En etiqueta de actividad de escritura manifiesta

androide: configChanges = "orientación | ScreenSize"

ejemplo:

<activity android:name=".MainActivity" 
      android:configChanges="orientation|screenSize"> 
+10

Precaución: a partir de Android 3.2 (nivel de API 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar que se reinicie el tiempo de ejecución debido al cambio de orientación cuando se desarrolla para API nivel 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor de "orientación". Es decir, debe descartar android: configChanges = "orientation | screenSize". (http://developer.android.com/guide/topics/resources/runtime-changes.html) – Rubix

+0

Información interesante Rubix. +1 –

+0

Rubix: ¿Qué significa la orientación y el valor de tamaño de pantalla aquí? La pregunta es solo por mi curiosidad. – vgokul129

1

En manifest.xml agrega android: configChanges = "orientation" para la actividad.

3

Usar un cheque bandera en onCreate. Hacer flag = true en el momento de la inicialización/declaración añadir androide: configChanges = "orientación" en ur archivo de manifiesto

En ur archivo Java anular el onConfigurationChanged método y hacer que la bandera como falsa.

Después de hacerlo, se llamará a onCreate pero no se invocará el código mencionado en si. Mueve el código ur dentro del si condición.

intente utilizar esto.

static boolean flag = true; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    if(flag) 
     Log.d("ONCREATE", "flag is true"); 
}  
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
    Log.d("ONCONFIGCHANGE", "CALLED"); 
    flag = false; 
    super.onConfigurationChanged(newConfig); 
} 
3

enfoque alternativo es el uso de onSaveInstanceState método para guardar los datos no persistentes en un haz. El estado debe restaurarse en onRestoreInstanceState o en onCreate. En onCreate debe analizar el parámetro savedInstanceState y si no es nulo, debe restaurar el estado previamente guardado.

2

Esta solución es, de lejos, la que mejor funciona. en el archivo de manifiesto añadir

<activity 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:name="your activity name" 
     android:label="@string/app_name" 
     android:screenOrientation="landscape"> 
     </activity 

Y en su clase de actividad añadir el siguiente código

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     //do your stuff here 
     // 
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    //do your stuff here 

    } 
} 
-1

para C# Xamarin tengo esta solución:

using System.Collections.Concurrent; 


public static class ObjectExchanger 
{ 
    private static ConcurrentDictionary<string, object> ObjectList = new ConcurrentDictionary<string, object>(); 

    /// <summary> 
    /// Add key and object. Do not add the same key twice. 
    /// </summary> 
    /// <param name="key"></param> 
    /// <param name="obj"></param> 
    public static void Add(string key, object obj) 
    { 
     ObjectList.GetOrAdd(key, obj); 
    } 

    /// <summary> 
    /// Get object via key. Do net Get twice. Key/object will remove after get it once. 
    /// </summary> 
    /// <param name="key"></param> 
    public static object Get(string key) 
    { 
     object obj = null; 

     ObjectList.TryRemove(key, out obj); 

     return obj; 
    } 
} 

Se puede utilizar en en OnCreate Método para hacer una copia de seguridad y restaurar sus datos para la actividad después de la rotación.

Cuestiones relacionadas