0

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

有没有办法解决这个问题而不必改变我的方法?如果不是,我应该怎么做才能解决这个问题?谢谢。

4

1 回答 1

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

另一种解决方案是不调用finish();您的 baseActivity,您的活动将如下所示:

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。

于 2014-05-19T12:41:26.133 回答