我有一个ListView
,列表中的每个元素都有自己的详细信息视图。每个细节视图也都有其“详细视图”。单击列表中的项目时,我将项目的ID发送到第一个详细信息视图(使用Intent
),然后使用它来获取数据。但是,当我转到第二个详细信息视图并导航回来时,活动会抛出NullPointerException
,因为(当然)getIntent().getExtras()
现在是空的。
有没有办法在不改变方法的情况下解决这个问题?如果不是我该怎么做才能解决这个问题?感谢。
答案 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。