2010-08-03 11 views
0

У меня есть этот код:Намерение не извлекая дополнительную

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); 
} 

И этот код, который получает дополнительный ИЗ РАЗЛИЧНЫХ ДЕЯТЕЛЬНОСТИ:

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

В первом фрагменте кода, Logcat говорит : The id of the selected note is 2, но во втором фрагменте кода Logcat говорит: Id of note = 0. Что здесь произошло? Любые решения этой ОЧЕНЬ раздражающей проблемы.

ответ

4

Я думаю, вы сбиваете с толку состояние, которое сохраняется при приостановке Activity, и данные доставляются на Activity через Intent.

Вы хотите иметь что-то вроде:

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

Bundle передается onCreate() является Bundle вы сохранили с the onSaveInstanceState() method и не массовка Bundle вы добавили в свой Intent.

+0

Пожалуйста, взгляните на мое разъяснение жирным шрифтом. –

0

Вы извлекаете лишний код очень неправильно. Заменить второй фрагмент кода с:

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

Вот что происходит в этом коде: getIntent() возвращает Intent созданный в первом фрагменте кода (в Intent, который был использован для запуска текущей деятельности). Затем .getLongExtra() возвращает прилагаемую дополнительную информацию. Если никакая дополнительная информация с этим тегом и этот тип данных (длинный) не найден, он вернется 0.

savedInstanceStatesavedInstanceState Используется для сохранения состояния вашего приложения, когда он выключен системой Android в условиях низкой памяти. Не путайте эти два.