2010-08-03 4 views
0

J'ai ce code:intention ne pas extraire supplémentaire

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Log.i(TAG, "The id of the selected note is " + id); 
    Intent editNote = new Intent(this, TaskEditActivity.class); 
    editNote.putExtra(TasksDBAdapter.KEY_ID, id); 
    startActivityForResult(editNote, EDIT_TASK_REQUEST); 
} 

Et ce code qui récupère le supplément D'UNE ACTIVITÉ DIFFÉRENTS:

if (savedInstanceState != null) { 
     id = savedInstanceState.getLong(TasksDBAdapter.KEY_ID); 
    } 
Log.i(TAG, "Id of note = " + id); 

Dans le premier extrait de code, dit Logcat : The id of the selected note is 2, mais dans le deuxième extrait de code, Logcat dit: Id of note = 0. Qu'est-ce qui vient de se passer ici? Toutes les solutions à ce problème très ennuyeux.

Répondre

4

Je pense que vous confondez l'état qui est enregistré lorsqu'un Activity est mis en pause et les données livrées au Activity via un Intent.

Vous voulez avoir quelque chose comme:

Bundle extras = getIntent().getExtras(); 
id = extras.getLong(TasksDBAdapter.KEY_ID); 

Le Bundle passé à onCreate() est le Bundle que vous avez enregistré avec the onSaveInstanceState() method et ne sont pas les extras Bundle ajoutés à votre Intent.

+0

Veuillez regarder ma clarification en gras. –

0

Vous récupérez l'extra d'une manière très incorrecte. Remplacez votre deuxième extrait de code avec:

id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0); 
Log.i(TAG, "Id of note = " + id); 

Voici ce qui se passe dans ce code: getIntent() retourne le Intent vous avez créé dans votre premier extrait de code (le Intent qui a été utilisé pour lancer l'activité en cours). Ensuite, .getLongExtra() renvoie les informations supplémentaires jointes. Si aucune information supplémentaire avec cette étiquette et ce type de données (long) est trouvé, il renverra 0.

savedInstanceState est utilisé pour enregistrer l'état de votre application lorsqu'il est arrêté par le système Android dans des conditions de mémoire insuffisante. Ne confondez pas ces deux-là.

Questions connexes