Como reinicio um Android Activity
? Eu tentei o seguinte, mas o Activity
simplesmente sai.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Samet ÖZTOPRAK
fonte
fonte
Respostas:
Eu fiz o meu alternador de temas assim:
Basicamente, estou ligando
finish()
primeiro e usando exatamente a mesma intenção com a qual essa atividade foi iniciada. Isso parece fazer o truque?ATUALIZAÇÃO: Conforme apontado por Ralf abaixo,
Activity.recreate()
é o caminho a seguir na API 11 e além. Isso é preferível se você estiver em um ambiente API11 +. Você ainda pode verificar a versão atual e chamar o snippet de código acima, se estiver na API 10 ou abaixo. (Por favor, não esqueça de votar de novo na resposta de Ralf!)fonte
Desde o nível 11 da API (Honeycomb), você pode chamar o método recreate () da atividade (graças a esta resposta).
O método recrte () atua como uma alteração na configuração, portanto, os métodos onSaveInstanceState () e onRestoreInstanceState () também são chamados, se aplicável.
fonte
Antes do SDK 11, uma maneira de fazer isso é:
fonte
overridePendingTransition(0, 0);
depoisfinish()
estartActivity()
, respectivamente, não onde você chamou-lhe ...Apenas para combinar as respostas de Ralf e Ben (incluindo as alterações feitas nos comentários):
fonte
Eu usei esse código para poder suportar versões mais antigas do Android e usar
recreate()
-las em versões mais recentes do Android.Código:
Amostra:
fonte
Esta solução funcionou para mim.
Primeiro termine a atividade e depois inicie-a novamente.
Código de amostra:
fonte
Essa é de longe a maneira mais fácil de reiniciar a atividade atual:
fonte
Chame este método
Obrigado,
fonte
Mesmo que isso tenha sido respondido várias vezes.
Se reiniciar uma atividade de um fragmento, eu faria assim:
Então você pode estar pensando que isso é um pouco exagerado? Mas a
Handler
postagem permite que você chame isso em um método de ciclo de vida. Eu usei isso emonRestart
/onResume
methods ao verificar se o estado mudou entre o usuário que volta ao aplicativo. (instalei algo).Sem o
Handler
se você o chamar em um local estranho, ele simplesmente matará a atividade e não a reiniciará.Sinta-se a vontade para fazer qualquer pergunta.
Cheers, Chris
fonte
Bem, isso não está listado, mas uma combinação de alguns que já foram publicados:
fonte
Em conjunto com o estranho comportamento do ciclo de vida do SurfaceView com a câmera . Descobri que recreate () não se comporta bem com o ciclo de vida do SurfaceViews. surfaceDestroyed nunca é chamado durante o ciclo de recreação. É chamado após onResume (estranho), momento em que meu SurfaceView é destruído.
A maneira original de recriar uma atividade funciona bem.
Não consigo descobrir exatamente por que isso ocorre, mas é apenas uma observação que, esperançosamente, pode guiar outras pessoas no futuro, porque corrigiu meus problemas que eu estava tendo com o SurfaceViews
fonte
Eu me pergunto por que ninguém mencionou
Intent.makeRestartActivityTask()
que faz exatamente esse propósito exato.Este método define
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
como sinalizadores padrão.fonte
Na verdade, o código a seguir é válido para os níveis 5 e superior da API; portanto, se sua API de destino for menor que isso, você terá algo muito semelhante ao código do EboMike.
fonte
Existe uma maneira hacky que deve funcionar em qualquer atividade, incluindo a principal.
Quando a orientação muda, o Android geralmente recria sua atividade (a menos que você a substitua). Este método é útil para rotações de 180 graus, quando o Android não recriar sua atividade.
fonte
tente usar isso ..
fonte
A solução para sua pergunta é:
Você precisa converter no contexto da atividade para iniciar uma nova atividade e também para concluir a atividade atual.
Espero que seja útil .. e funcione para mim.
fonte
Se você remover a última linha, criará uma nova
act
atividade, mas sua instância antiga ainda estará ativa.Você precisa reiniciar a atividade como quando a orientação é alterada (ou seja, seu estado é salvo e passado para
onCreate(Bundle)
)?Caso contrário, uma solução alternativa possível seria usar uma atividade fictícia extra, que seria iniciada a partir da primeira atividade e qual tarefa iniciaria uma nova instância dela. Ou apenas adie a chamada para
act.finish()
depois que a nova for iniciada.Se você precisa salvar a maior parte do estado, está entrando em águas muito profundas, porque não é trivial passar todas as propriedades do seu estado, especialmente sem vazar seu antigo Contexto / Atividade, passando-o para a nova instância.
Por favor, especifique o que você está tentando fazer.
fonte
É assim que eu faço.
fonte
Se você estiver chamando de algum fragmento, faça o código abaixo.
fonte
você pode simplesmente usar
método da seguinte maneira
e ligue para onRestart () onde deseja reiniciar a atividade atual
fonte
Chame o método onCreate. Por exemplo
onCreate(null);
fonte