Après je fais un peu de changement dans ma base de données, qui entraîne des changements importants dans mon point de vue, je tiens à redessiner, ré-exécuter onCreate.
Comment est-ce possible?
Après je fais un peu de changement dans ma base de données, qui entraîne des changements importants dans mon point de vue, je tiens à redessiner, ré-exécuter onCreate.
Comment est-ce possible?
Hmm, peut-être que ce n'est pas une bonne façon de faire les choses (selon CommonsWare du commentaire), mais la façon dont j'ai géré la situation dans mon jeu est tout simplement la réutilisation de l'intention qu'a commencé l'activité. Définir une intention starterIntent
en haut de votre classe et dans la méthode onCreate utiliser starterIntent = getIntent()
pour récupérer l'Intention qui a commencé cette activité. Puis, quand vous voulez redémarrer l'activité, appelez - startActivity(starterIntent); finish();
Comme je l'ai écrit ci-dessus, peut-être que ce n'est pas très élégante, la solution et le temps de traitement des déchets, mais c'est une façon simple de redémarrer votre activité et le forcer à recharger tout.
Appelez le recréer la méthode de l'activité.
La combinaison de certaines réponses ici, vous pouvez utiliser quelque chose comme ce qui suit.
class BaseActivity extends SherlockFragmentActivity
{
// Backwards compatible recreate().
@Override
public void recreate()
{
if (android.os.Build.VERSION.SDK_INT >= 11)
{
super.recreate();
}
else
{
startActivity(getIntent());
finish();
}
}
}
Je l'ai testé un peu, et il y a quelques problèmes:
startActivity(...); finish();
seulement exister l'application et ne pas redémarrer l'activité.super.recreate()
ne fait pas agir de la même façon totalement recréer de l'activité. Il est équivalent à la rotation de l'appareil, donc si vous avez des Fragment
s avec setRetainInstance(true)
ils ne seront pas recréés; simplement en pause et reprit.Donc, actuellement, je ne crois pas qu'il existe une solution acceptable.
pour l'API avant le 11 vous ne pouvez pas utiliser le recréer(). J'ai résolu de cette façon:
Bundle temp_bundle = new Bundle();
onSaveInstanceState(temp_bundle);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("bundle", temp_bundle);
startActivity(intent);
finish();
et dans onCreate..
@Override
public void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra("bundle") && savedInstanceState==null){
savedInstanceState = getIntent().getExtras().getBundle("bundle");
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//code
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.