2014-05-19 3 views
0

У меня есть ListView, и каждый из элементов списка имеет свой собственный подробный вид. Каждый из подробных представлений также имеет «подробный вид». Когда щелкнут элемент в списке, я отправляю идентификатор элемента в первое подробное представление (используя Intent), и я использую его для извлечения данных. Однако, когда я перехожу ко второму подробному представлению и перехожу назад, Activity выдает NullPointerException, потому что (конечно) getIntent().getExtras() пуст.Действия теряют данные при возвращении из подробного представления

Есть ли способ решить эту проблему без изменения моего подхода? И если нет, то что я должен сделать, чтобы решить эту проблему? Благодарю.

+1

отправьте свой код. –

+0

Пожалуйста, разместите свою ошибку logcat и java-код. –

+2

@SimplePlan Я знаю, в чем проблема, я просто ищу решение, и я думаю, что я был довольно ясен в вопросе. – Loolooii

ответ

1

Один из способов заключается в том, чтобы отправить эти дополнительные детали в подробный вид, а затем, когда вы перейдете назад, вы отправляете эти дополнительные функции обратно, поэтому, когда ваша деятельность (та, которая имеет listView), она не будет разбита.

Это будет выглядеть примерно так:

baseActivity.java (это одна с ListView)

Intent intent = new Intent(this, detailView.class); 
intent.putExtra("nameHere1", valueHere1); 
intent.putExtra("nameHere2", valueHere2); 
//just put extra's here 
startActivity(intent); 
finish(); 

и в вашем detailView.java бы сделать что-то подобное в вашей onBackPressed:

Еще одно решение: НЕ позвонить finish(); в вашей базе. Активна, ваши действия будут выглядеть так:

baseActivity.java (это одна с ListView)

Intent intent = new Intent(this, detailView.class); 
intent.putExtra("nameHere1", valueHere1); 
intent.putExtra("nameHere2", valueHere2); 
//just put extra's here 
startActivity(intent); 

detailView.java бы сделать что-то подобное в вашей onBackPressed:

finish(); 

При таком подходе, вы не " kill "baseActivity, поэтому его значения все еще присутствуют, когда detailView появляется на экране. Тем не менее, я не поддерживаю этот подход, так как он занимает лишнюю оперативную память.

+0

Спасибо за ваш ответ. Главное - вызвать методBackPressed(). Но то, что я сделал, это определение первого подробного представления в качестве родителя второго детального представления. Мне пришлось удалить это и вызвать finish() в onBackPressed() в моем втором подробном представлении. – Loolooii

Смежные вопросы