103 votes

OnCreate non appelé

J'ai 2 activités : Dans la première activité, l'utilisateur clique sur un bouton qui lance la 2ème activité. La 2ème activité fait tout le travail.

Je lance la 2ème activité comme suit qui se trouve à l'intérieur d'une classe interne onClickListener et j'ai essayé de l'appeler explicitement avec (FirstActivity.this, Simple.Class) mais la même chose se produit.

    Intent test = new Intent(arg0.getContext(), Simple.class);
    startActivity(test);

Sur l'émulateur, je vois l'écran se déplacer comme s'il appelait la 2ème activité mais tout ce que j'obtiens est un écran noir mais rien n'est chargé depuis mon layout. J'ai regardé dans logcat et je vois quelques messages d'échec du thread binder. Voici la fonction onCreate de ma 2ème activité mais je n'obtiens aucun résultat montrant que les fonctions Log ont été appelées, ni à l'écran ni dans logcat:

    public void onCreate(Bundle savedState)
    {
       Log.d("SimpleActivity", "OnCreate Started");

       super.onCreate(savedState);
       setContentView(R.layout.simple);

       Log.d("SimpleActivity", "OnCreate Ended");
    }

Remarque : J'ai appelé le constructeur de base dans onCreate() avec super.onCreate(savedState) dans mon code ci-dessus.

1voto

CQM Points 5056

Vous devriez @Override onCreate et ajouter super.onCreate() dedans

@Override
public void onCreate(Bundle savedState)
{
  super.onCreate(savedState);

  Log.d("SimpleActivity","OnCreate Started");
  setContentView(R.layout.simple);
  Log.d("SimpleActivity","OnCreate Ended");
}

1voto

Energy Points 62

Mon cas

(1) mainActivity -> (2) ouvrir Adaptor - startActivity -> (3) mainActivity onCreate() ne se déclenche pas.

J'ai résolu cela en ajoutant finish();. dans mainActivity.

suivez les étapes ci-dessous pour vérifier votre application.

1. Avez-vous remplacé la bonne méthode? si vous ne remplacez pas la méthode ci-dessous, cette méthode sera déclenchée lorsque vous démarrez une activité.

protected void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState);

2. Assurez-vous d'avoir enregistré l'activité dans le fichier manifest.xml

2.1 est-ce que votre activité a android:launchMode="singleInstance" ? (si votre application n'a pas besoin d'être singleinstance, envisagez de le supprimer. mais dans mon cas j'ai besoin de singleinstance. donc je suis passé à l'étape suivante)

  1. utilisez finish()

     public void openSearch(View view) {
     Intent intent = new Intent(this, BookInfoActivity.class);
     intent.putExtra(...);
     startActivity(intent);
     finish(); // ajoutez comme ceci.}

pourquoi devons-nous utiliser "finish()"?

Écran A -> cliquez sur le bouton sur A -> Écran B -> cliquez sur le bouton sur B -> écran A avec de nouvelles données que vous obtenez de l'écran B

si vous n'appelez pas la méthode finish() (dans le bouton A), cela signifie que A est toujours en arrière-plan même si vous voyez l'écran B.

ainsi, lorsque vous démarrez startActivity sur l'écran B, cela montre simplement l'écran A en cours d'exécution.

cependant, si vous utilisez la méthode finish() (dans le bouton A), lorsque vous allez sur l'écran B, cela détruit l'écran A, donc lorsque vous revenez à l'écran A en cliquant sur la méthode B ('StartActivity') cela crée l'écran A et déclenche la méthode onCreate().

0voto

AVD Points 57984

Vous devez appeler la méthode super.onCreate(savedState). Consultez la documentation sur les activités.

 public void onCreate(Bundle savedState)
    {
     super.onCreate(savedState);
    }

Prograide.com

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.

Powered by:

X