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

12 respostas
eliangela

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!

12 Respostas

eliangela

Ninguém??

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é +

Marky.Vasconcelos

Eu uso essa abordagem também.

P

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é +

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 !

Marky.Vasconcelos

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 !

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).

eliangela

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.

msilveira.ti

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!

V

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

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

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?

Ivan_Alves

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?

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

Z

Ivan Alves:
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?

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

É 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

max.analista
Zenity:
Ivan Alves:
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?

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

É 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

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

@Override
 	public void onSaveInstanceState(Bundle savedInstanceState) {
		super.onSaveInstanceState(savedInstanceState);
		savedInstanceState.putSerializable("listaPedidos", itens);
	}
@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);
	}
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
itens=(ArrayList<Item>) savedInstanceState.getSerializable("listaPedidos");
e o restante do código é setando essa lista na sua ListView.

Abraço.

Criado 30 de agosto de 2011
Ultima resposta 14 de mar. de 2013
Respostas 12
Participantes 8