[RESOLVIDO] Não executar método onCreate() ao rotacionar tela no Android

Olá, pessoal!

Estou fazendo um aplicativo para android que tem vários EditText para preencher. O problema é que, quando eu rotaciono o celular, minha Activity chama o método onCreate() de novo e reinicia a tela, apagando tudo o que o usuário já digitou.

Quero que, quando a tela seja rotacionada, ele não faça nada, mantendo o que o usuário está digitando.

Já andei dando uma pesquisada e encontrei isso aqui na documentação do Android: http://developer.android.com/reference/android/content/Intent.html#ACTION_CONFIGURATION_CHANGED
Na classe Intent tem algo relacionado à constante “android.intent.action.CONFIGURATION_CHANGED”, mas eu não estou sabendo usar!!
O que eu devo fazer?

Obrigada!

Ninguém??

Resolvido!

Descobri que não é possivel “não chamar o método onCreate()”, então eu estou salvando os estados dos meus EditText e depois recuperando esses estados.
Resposta neste link: http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state

Até +

Eu uso essa abordagem também.

[quote=eliangela]Resolvido!

Descobri que não é possivel “não chamar o método onCreate()”, então eu estou salvando os estados dos meus EditText e depois recuperando esses estados.
Resposta neste link: http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state

Até +[/quote]

Credo…achei que vc iria acabar descobrindo que basta declarar no manifest o valor correto que a activity não é recriada quando a tela é girada !

[quote=boone]
Credo…achei que vc iria acabar descobrindo que basta declarar no manifest o valor correto que a activity não é recriada quando a tela é girada ![/quote]

Que seria esse atributo que voce declara na tag da activity

android:configChanges="orientation"

Mas pelo o que eu vi no codigo que usei isso, eu salvei o estado assim e carregava no onCreate:


    public void onConfigurationChanged(Configuration cfg) {
        saveState();
    }

Não tenho certeza se o onCreate é chamado denovo (esse método faz mais coisas fora salvar o estado).

não precisa tirar o mérito da minha solução! :frowning: aquela foi a única que eu encontrei, e encontrei pesquisando sozinha.
Vou tentar o que vc sugeriu, mas por uma questão de perfomance mesmo.

Também tive esse problema.

Falei com um amigo e ele me deu essa dica, para mim funciono perfeitamente

Na Activtiy:

@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
	}

No Manifest, na tag da activity:

       android:configChanges="orientation|keyboard|keyboardHidden">

Eu adicionei três palavras chaves para minha tela não fazer nada quando rotacionar o smartphone ou quando abrir e fechar o teclado no caso
de Milestone e companhia.

Vlw galera. Abraço!

Não sabia dessa solução, eu coloco isso nas minhas Activitys:

<activity android:name="br.com.atividade" android:configChanges="orientation" />

OPa galera!

Tentei usar a solução do manifest aqui, mas meu problema é que minha Activity não está definida nele (É uma listView que eu fiz).
Nesse caso a única solução seria utilizando o método onSave e onRestore?

[quote=Zenity]OPa galera!

Tentei usar a solução do manifest aqui, mas meu problema é que minha Activity não está definida nele (É uma listView que eu fiz).
Nesse caso a única solução seria utilizando o método onSave e onRestore?[/quote]

Até onde eu sei para abrir um Activity ela deve estar declarada no seu AndroidManifest.xml.

[quote=Ivan Alves][quote=Zenity]OPa galera!

Tentei usar a solução do manifest aqui, mas meu problema é que minha Activity não está definida nele (É uma listView que eu fiz).
Nesse caso a única solução seria utilizando o método onSave e onRestore?[/quote]

Até onde eu sei para abrir um Activity ela deve estar declarada no seu AndroidManifest.xml.[/quote]

É eu falei errado, ela não é uma Activity, mesmo porque o Adapter vai extender do BaseAdapter, mas de qualquer modo.
Como faria nesse caso? Porque ele fica perdendo o valor do EditText e das informações que eu digitei dentro do ListView

[quote=Zenity][quote=Ivan Alves][quote=Zenity]OPa galera!

Tentei usar a solução do manifest aqui, mas meu problema é que minha Activity não está definida nele (É uma listView que eu fiz).
Nesse caso a única solução seria utilizando o método onSave e onRestore?[/quote]

Até onde eu sei para abrir um Activity ela deve estar declarada no seu AndroidManifest.xml.[/quote]

É eu falei errado, ela não é uma Activity, mesmo porque o Adapter vai extender do BaseAdapter, mas de qualquer modo.
Como faria nesse caso? Porque ele fica perdendo o valor do EditText e das informações que eu digitei dentro do ListView[/quote]

Meu amigo, basta adicionar os seguintes métodos na sua Activity:

   [code]@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
	super.onSaveInstanceState(savedInstanceState);
	savedInstanceState.putSerializable("listaPedidos", itens);
}[/code]

[code]@SuppressWarnings("unchecked")
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  itens=(ArrayList<Item>) savedInstanceState.getSerializable("listaPedidos");
  adapterListItens = new AdapterListItens(RealizarPedidoActivity.this, itens);
  if(listView==null){
	  listView = (ListView) findViewById(R.id.lista);
  }
      listView.setAdapter(adapterListItens);
      listView.setCacheColorHint(Color.TRANSPARENT);
}[/code]

No primeiro método, ele vai salvar a sua lista serializando-a.
No segundo método, quando o flush for executado, ele vai executar o onCreate e posteriormente o este segundo método(onRestoreInstanceState) o qual irá conter a busca da lista serializada

e o restante do código é setando essa lista na sua ListView.

Abraço.