1

我遇到了 SavedInstanceStates 的问题。在我的应用程序的主活动中,列表视图中填充了数据库中的名称。当您单击其中一个姓名时,将打开一个新活动,其中显示从单独的数据库中提取的另一个列表视图,并详细说明有关此人的各种信息。此列表视图上的项目仅在其 characterID(根据创建它们的人的姓名设置)和原始数据库中的人的 id 匹配时才会显示。长话短说,您可以创建一个人 Trevor,然后当您单击 Trevor 时会显示许多特定于 Trevor 的信息。您还可以单击这些信息以打开新活动并编辑该信息/使用该信息进行操作。我通过保存用 setData 点击的人的 Uri 来做到这一点,

当用户单击有关 Trevor 的一条信息并在新活动中打开时,包含 id 的变量将被销毁,就像我在第一个活动中设置的数据一样。因此,当我单击返回时,它会由于 NullPointerException 而崩溃。所以我现在在执行我的数据库查询之前检查来自 getData() 的数据是否为空。但这只会使列表视图为空,因为它在查询数据库时没有可使用的 ID。

所以我尝试使用 onSaveInstanceState 来保存 characterId 变量。但是使用 onRestoreInstanceState 似乎不起作用。导航到第三个活动,然后通过单击返回完成它,似乎没有调用 onRestoreInstanceState。我还尝试检查 onCreate 中的 savedInstanceState 是否为空,查看它是否包含我设置的密钥,然后将其撤回,但 onCreate 中的 savedInstanceState 是否为空,无论我是先导航到它,还是点击后退按钮返回它. 我已经环顾了几个小时试图找出答案。这是工作的错误工具吗?我错过了什么吗?

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 为空,当我从它之后的活动中按下时。

@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);
}
4

0 回答 0