Pregunta

Creé una aplicación de registro de datos rudimentaria, que se supone que debe permitir que el usuario ingrese valores en una cantidad dinámica y, a menudo, de gran cantidad de vistas EditText.Una vez que el usuario haya terminado de ingresar todos los datos, se puede presionar un botón que toma una fotografía de la entrada de datos (tenga paciencia con el almacenamiento de la entrada como una imagen, hay razones específicas para esto) y guarda la imagen en el almacenamiento. .

Problema:Funciona muy bien, excepto por un problema en particular.En ocasiones, cuando el usuario pone el teléfono en modo inactivo (lo que ocurre con frecuencia antes de que la entrada se guarde), toda la entrada en las vistas de EditText se borrará (lo que me convierte en una persona muy enojada/triste).Es más, solo ocurre cuando estoy en el campo y no puedo mirar los archivos de registro en eclipse para descubrir qué métodos podrían estar siendo llamados de manera diferente a lo normal.

Pregunta:¿Por qué los valores en mis EditTexts persisten la mayor parte del tiempo cuando el teléfono entra y sale del estado de inactividad, pero se borran en ocasiones aparentemente aleatorias (y a menudo inconvenientes)?

Tengo la sensación de que esto se debe a que se llama a onStop() en lugar de onPause() (o quizás viceversa) en ciertas ocasiones, pero mi conocimiento de estos métodos aún no está al día.Además, soy consciente de que este problema podría resolverse mediante un archivo de preferencias compartidas (o alguna idea similar), pero me gustaría saber qué está ocurriendo para comprenderlo más que cualquier otra cosa.

Detalles:

-No estoy seguro de si algo de este código podría ser relevante para la pregunta de manera significativa, pero incluiré un fragmento de mi método onCreate() si ayuda.Déjame saber si debo agregar algo más:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_param);

    Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent

-No he anulado ninguno de los métodos del ciclo de vida (es decir,onStop(), onResume(), etc.) excepto onCreate().Ninguno de los otros métodos en mi actividad debería tener nada que ver con el problema/hasta donde yo sé

¿Fue útil?

Solución

Creo que el problema es que en momentos en que su aplicación está "inactiva" (es decir,yendo a segundo plano, pantalla apagada) que Android lo limpia automáticamente y destruye todos los datos, incluidos los de su EditTexts.

Si una actividad se pausa o se detiene, el sistema puede eliminarla de la memoria pidiéndole que finalice o simplemente finalizando su proceso.Cuando se muestra nuevamente al usuario, se debe reiniciar completamente y restaurar a su estado anterior.

http://developer.android.com/reference/android/app/Activity.html

Para solucionar este problema, puede anular el onSavedInstanceState() Método para guardar tu EditText valores y luego onCreate() recuperará esos valores cuando regrese a la actividad.Luego necesitará una verificación para ver si necesita repoblar su EditTexts de esos valores o si eran nulos.Más sobre esto aquí.

Otros consejos

Esto probablemente está sucediendo porque el método ONDESTROY o OPPAUSE se llama en el tiempo de inactividad.El OnDestroy se llamaría en carcasa, la memoria es el uso de la aplicación.La única solución en mi opinión es guardar datos en un DB local a medida que se está ingresando, y la vuelva a rellenarla OnResume.

Para resolver su problema en Ovapause () Método de su actividad Tome los valores insertados por el usuario en las variables estáticas (requerirá la cantidad de variables que tiene EDITTEXT que tiene) y almacenar los valores en las variables y en OnResume () Vuelva a colocar los valores a EditText.

package com.zeus.program;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {

    public static String username;
    public static String password;


    EditText usernameET;
    EditText passwordET;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        usernameET = findViewById(R.id.username);
        passwordET = findViewById(R.id.password);
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        usernameET.setText(username);
        passwordET.setText(password);

    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        username = usernameET.getText().toString();
        password = passwordET.getText().toString();

    }   
}

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