Java 按下子活动中的“向上”按钮时,父活动中的savedInstanceState为空
我在应用程序中使用“向上”按钮时遇到问题。我已经读过很多关于类似问题的帖子,但没有一篇是针对我想要解决的问题 我有两个活动-Java 按下子活动中的“向上”按钮时,父活动中的savedInstanceState为空,java,android,onsaveinstancestate,up-button,Java,Android,Onsaveinstancestate,Up Button,我在应用程序中使用“向上”按钮时遇到问题。我已经读过很多关于类似问题的帖子,但没有一篇是针对我想要解决的问题 我有两个活动-A和B。 显示SQLite数据库中所选类别的任务列表。每个任务都属于一个类别,因此,a有一个从Intent传递的私有变量topicId(它充当过滤器)。当我点击一个任务时,它会打开活动B,您可以编辑它。B有一个向上按钮,它会将您引导回A(任务列表) 由于A从intent中获取topicId,当我单击B中的Up按钮时,A中没有intent,并且topicId默认为-1。我认为
A
和B
。
显示SQLite数据库中所选类别的任务列表。每个任务都属于一个类别,因此,a有一个从Intent传递的私有变量topicId
(它充当过滤器)。当我点击一个任务时,它会打开活动B,您可以编辑它。B有一个向上按钮,它会将您引导回A(任务列表)
由于A从intent中获取topicId,当我单击B中的Up按钮时,A中没有intent,并且topicId默认为-1。我认为保存id很容易-只需这样保存即可:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("topicId", this.TOPIC_ID);
}
在我使用的onCreate()方法中:
if(savedInstanceState != null) {
this.TOPIC_ID = savedInstanceState.getInt("topicId");
}
但是,传递给onCreate()的savedInstanceState总是null
。
我将日志放在A的生命周期方法中,以查看发生了什么
onCreate()
并且捆绑包为空onSaveInstanceState()
运行并保存我的IdonDestroy()
,然后运行A的onCreate()
,包为null
李>
有人能告诉我为什么在这种情况下,onCreate()
中的Bundle为null吗?我已在manifest.xml中将B的父活动设置为A。我还阅读了一个解决方案,其中假设您在清单中为a添加android:launchMode=“singleTop”
然而,这不是我想要的——如果设置为singleTop,当您单击Up按钮时,父活动不会被销毁。我希望它被销毁并重新创建,因为在B中,我对一个任务进行了更改,我希望在单击Up时看到该任务立即从a中的DB重新加载
如果有人告诉我为什么Android会将null
包传递给onCreate()
,我将不胜感激。我已经尝试将此代码添加到B中,但没有成功:
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpFromSameTask(this);
我认为这篇文章是关于同一个问题的,但它已经有四年没有被回复了
如果你需要的话,我会发布代码。我不想一开始就太过势不可挡
编辑 经过进一步搜索,我找到了以下解决方案: 据说: 按“上一步”时,活动将被销毁,其拥有的数据将丢失。在此之后,当您重新打开应用程序时,由于正在创建一个新的、新的实例,因此捆绑包中始终会出现null 由于某些更改(如旋转)或由于在后台长时间暂停而重新创建活动时,将使用Bundle savedInstanceState
如果您想保留一些数据,请考虑小件的SyrdPoopy,或者数据库(SQLite,Valite)或大文件的文件。
据我所知,Android只在某些特定情况下使用该捆绑包,例如当您关闭/打开屏幕时,单击Home按钮或更改屏幕方向。在像我这样的情况下,您必须依赖其他一些功能,如
SharedReferences
类。我欢迎比我有更高知识的人来解释这件事。你是如何开始活动B的?SaveInstanceState是Android在需要内存并终止活动以释放内存时所做的事情/在活动A中,我有一个带有RecyclerView的片段,其中有多个任务的CardView。我在任务上附加了一个onClickListener,当单击其中一个时,以下代码将处理它:@Override
public void onItemClick(int-id){
Intent-Intent=new-Intent(getActivity(),CreateTaskActivity.class);
Intent.putExtra(CreateTaskActivity.EXTRA\u-TASK\u-id,id)
开始活动(意图);
}
活动b的android:launchMode是什么?它没有指定,所以它必须是默认值标准
。后退按钮销毁活动,最好的方法是为此使用SharedReferences。