Java “后退”按钮后再次创建活动时,可传送数据不可用
我有一个活动。它接收可包裹对象并将其另存为属性 问题是,当您按下其中一个ListView项时,会显示另一个活动:Java “后退”按钮后再次创建活动时,可传送数据不可用,java,android,android-activity,parcelable,oncreate,Java,Android,Android Activity,Parcelable,Oncreate,我有一个活动。它接收可包裹对象并将其另存为属性 问题是,当您按下其中一个ListView项时,会显示另一个活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); setHjClient((Client) getIntent().getParc
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setHjClient((Client) getIntent().getParcelableExtra("hjClient"));
setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//super.onListItemClick(l, v, position, id);
Complejo c = ((Complejo) l.getAdapter().getItem(position));
Intent i = new Intent(this, ComplejoActivity.class);
i.putExtra("session", getHjClient().getSession());
i.putExtra("complejo", c);
startActivity(i);
}
在此之前,一切都按预期工作,但当我按下“上一步”按钮时,再次调用OnCreate方法,但现在getIntent()为null,因此我没有填充ListView所需的可打包数据,因此收到NullPointerException错误
当我按下“后退”按钮后显示“活动”时,如何访问该可传送数据
编辑了我的onCreate方法:
Client hjClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
if (getIntent().getExtras() != null) {
setHjClient((Client) getIntent().getParcelableExtra("hjClient"));
setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
} else if (savedInstanceState != null) {
setHjClient((Client) savedInstanceState.getParcelable("hjClient"));
setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putParcelable("hjClient", getHjClient());
super.onSaveInstanceState(outState);
}
您可以使用而不是startActivity,然后在其他活动完成时将意图发送回 您可以尝试使用
onSaveInstanceState()
在活动消失之前保存数据。您的“活动”听起来像被破坏了(可能是因为内存限制)
这是一个“经典”的例子,Android说如果发生超出您控制范围的事件,您需要持久化数据。最好的例子是当用户在你的应用程序中,电话铃响时。他们离开你的应用程序,当他们返回时,你不应该期望“状态”被保存
您需要找到一种方法来保存从以下位置获取的可包裹数据:
getIntent().getParcelableExtra("hjClient"))
该调用应该是对“SharedReferences”或其他持久数据存储的调用
这并不容易实现,因为如果用户有其他方式可以访问此活动,那么您需要对此进行说明
另一种方法(在另一个答案中提到,但没有很好地解释)是捆绑您的数据以开始下一个活动,然后当该活动完成时,使用“setResult”在“onActivityForResult”中传回该数据,如下所述:
然后检查数据的结果并重新填充客户端对象
一句话:不要期望用户能够返回到上次看到的状态中的任何活动,而不保留数据以重新创建该状态。这也不起作用。当我按下back按钮时,onCreate方法被激发并且getIndent()为nullsavedInstanceState在onCreate方法中为null,当我按下back按钮时,使用startActivityForResult的方法对我有效。非常感谢你,吉姆