从详细信息视图返回时,活动会丢失数据

时间:2014-05-19 12:35:24

标签: android android-intent android-bundle

我有一个ListView,列表中的每个元素都有自己的详细信息视图。每个细节视图也都有其“详细视图”。单击列表中的项目时,我将项目的ID发送到第一个详细信息视图(使用Intent),然后使用它来获取数据。但是,当我转到第二个详细信息视图并导航回来时,活动会抛出NullPointerException,因为(当然)getIntent().getExtras()现在是空的。

有没有办法在不改变方法的情况下解决这个问题?如果不是我该怎么做才能解决这个问题?感谢。

1 个答案:

答案 0 :(得分: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中执行类似的操作:

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

另一个解决方案是不在你的baseActivity中调用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();

在这种方法中,你不会杀死" baseActivity,当detailView出现在屏幕上时,它的值仍然在那里。但是,我并不支持这种方法,因为它占用了不必要的RAM。