Pergunta

Eu fiz um rudimentar de Dados de log do aplicativo, que é suposto ter o usuário valores de entrada em uma dinâmica e, muitas vezes, grande número de EditText pontos de vista.Quando o usuário terminar de inserir todos os Dados, um botão pode ser pressionado, que tira uma foto da entrada de dados (ter comigo a respeito de guardar a entrada como uma imagem, existem razões específicas para isso), e salva a imagem para armazenamento.

Problema: Ele funciona muito bem, exceto por um problema específico.Na ocasião, quando o usuário coloca o telefone no ocioso (o que ocorre com freqüência antes da entrada realmente fica guardado), todos da entrada na EditText vistas claro (me fazer muito irritado/triste).O que é mais, é só ocorreu quando estou em campo e incapaz de olhar para os arquivos de log in do eclipse para descobrir quais são os métodos que podem ser chamados de forma diferente do que o normal.

Pergunta:Por que é que os valores no meu EditTexts persistir a maior parte do tempo, quando o telefone vai para e a partir do ocioso, ainda que limpar no aparentemente aleatórios (e muitas vezes inconveniente) ocasiões?

Eu tenho um sentimento que este é causado por onStop() está sendo chamado, em vez de onPause() (ou, talvez, vice-versa), em certas ocasiões, mas meu conhecimento desses métodos não é muito rápido ainda.Também, estou ciente de que este problema poderia ser resolvido através de um sharedPreferences de arquivo (ou algum tipo de ideia), mas eu gostaria de saber o que está ocorrendo por causa de entendimento, mais do que qualquer outra coisa.

Detalhes:

-Eu não tenho certeza se algum deste código podem ser relevantes para a questão de uma forma significativa, mas eu vou incluir um trecho de meu onCreate() método se isso ajuda.Deixe-me saber se gostaria de acrescentar mais alguma coisa:

@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

-Eu ainda não substituído qualquer um dos métodos de ciclo de vida (i.e.onStop(), onResume(), etc.) exceto para onCreate().Nenhum dos outros métodos na minha atividade deve ter alguma coisa a ver com o problema/ tão longe quanto eu posso dizer

Foi útil?

Solução

Eu acredito que o problema é que, às vezes, quando seu aplicativo está indo "idle" (i.é.indo para o fundo, tela desligada) de que o Android é automaticamente limpá-lo e destruir todos os dados, incluindo o seu EditTexts.

Se uma atividade está em pausa ou parado, o sistema pode soltar a atividade da memória, fazendo ele terminar, ou simplesmente matando o seu processo.Quando ele é exibido para o usuário, ele deve ser completamente reiniciado e restaurado ao seu estado anterior.

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

Para corrigir esse problema, você pode substituir o onSavedInstanceState() método para salvar seu EditText os valores de e, em seguida, onCreate() vai puxar esses valores de volta quando você voltar para a atividade.Você vai precisar de uma verificação para ver se você precisa preencher o seu EditTexts a partir desses valores, ou se eles foram nulos.Mais sobre isso aqui.

Outras dicas

Provavelmente, isto está acontecendo becoz o ondestroy ou método onpause é chamado no tempo ocioso.O ondestroy seria chamado em sendo a memória é o uso de app é alta.A única solução na minha opinião é para salvar os dados em um local DB como ele está sendo inserido, e voltar a preenchê-lo onresume.

Para resolver o seu problema no onPause() o método da sua Actividade tomar os valores inseridos pelo usuário em variáveis estáticas (você vai precisar de número de variáveis quanto EditText) e de armazenamento de valores em variáveis e em onResume() colocar os valores em 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top