我遇到了SavedInstanceStates的问题。在我的应用程序的主要活动中,列表视图使用数据库中的名称填充。当您单击其中一个名称时,将打开一个新活动,该活动显示从单独的数据库中提取的另一个列表视图,并详细说明有关该人员的各种信息。此列表视图中的项目仅在其characterID根据创建其名称的人员设置,并且原始数据库中人员的ID匹配时才会显示。长话短说,你可以创建一个人特雷弗,然后当你点击特雷弗时,会有一些特定于特雷弗的信息。您还可以单击这些信息来打开新活动并编辑该信息/使用该信息进行操作。我这样做是通过保存用setData点击的人的Uri,然后用getData获取uri并从中解析id以进行第二次查询。
当用户点击一条关于Trevor的信息并在新活动中打开时,包含id的变量将被销毁,就像我在第一个活动中设置的数据一样。因此,当我单击后退时,它会因NullPointerException而崩溃。所以我现在在执行数据库查询之前检查来自getData()的数据是否为null。但是这只是将listview留空,因为它在查询数据库时没有id。
所以我尝试使用onSaveInstanceState来保存characterId变量。但是使用onRestoreInstanceState似乎不起作用。导航到第三个活动,然后通过单击返回完成它似乎不会调用onRestoreInstanceState。我还试图在onCreate中检查savedInstanceState是否为null,看看它是否包含我设置的键,然后将其撤消,但是onCreate中的savedInstanceState为null,无论我是先导航到它还是点击后退按钮返回它。我环顾了几个小时试图找出答案。这是错误的工具吗?我错过了什么吗?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalog);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(savedCIdString)) {
characterId = savedInstanceState.getInt(savedCIdString);
}...
我的onCreate的片段,我尝试检索变量,但是当我第一次导航到它时,SavedInstanceState为null,当我从它后面的活动中按回来时。
@Override
protected void onSaveInstanceState (Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(savedCIdString, characterId);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
characterId = savedInstanceState.getInt(savedCIdString);
}