在android中从捆绑包中检索数据
所以我设法解决了从bundle中检索信息的问题,但是我不得不做一些我认为很奇怪的事情。我首先尝试的方法是:在android中从捆绑包中检索数据,android,android-intent,bundle,Android,Android Intent,Bundle,所以我设法解决了从bundle中检索信息的问题,但是我不得不做一些我认为很奇怪的事情。我首先尝试的方法是: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); list = savedInstanceState.getInt("listmenu"); } 这就是我将信息放入捆绑包并调用活动的方式: Intent myIn
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
list = savedInstanceState.getInt("listmenu");
}
这就是我将信息放入捆绑包并调用活动的方式:
Intent myIntent = new Intent(MainActivity.this, NewActivity.class);
myIntent.putExtra("listmenu", R.menu.listmenu);
MainActivity.this.startActivity(myIntent);
但那没用。它会在第3行崩溃,这是我试图获取int的列表(我不知道确切的原因,但它不起作用)
在谷歌搜索之后,我试着这样做:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
list = extras.getInt("listmenu");
}
在我看来,getIntent().getExtras()只返回savedInstanceState。但如果是这样的话,我的第一种方法就会奏效。因此,我必须误解savedInstanceState是什么,或者getIntent()是做什么的,那么有人能解释一下这两件事之间的区别吗?如果活动被销毁,然后重新创建(即在配置更改时),则会将一个包传递给onCreate()。如果要在重新创建活动时保存数据,则需要覆盖onSaveInstanceState。此捆绑包将同时传递给onCreate和onRestoreInstanceState
您包含的第二块代码对于读取传递给新启动活动的包是正确的。这是否澄清了问题?最好的办法是阅读中对每一项的描述。是的,我认为这澄清了问题。因此,如果活动已经存在并且正在以某种方式恢复,我将只接收savedInstanceState?否则,我需要使用getIntent().getExtras()?如果它正在被销毁和重新创建,则不会恢复。如果您想向自己证明这一点,我建议覆盖所有这些方法,并在log.d(“lifecycle”、“onCreate()”)和log.d(“lifecycle”、“onPause()”)中加入日志调用,etc…从savedInstanceState上的javadoc:
如果活动在先前关闭后正在重新初始化,则此捆绑包包含它最近在onSaveInstanceState(捆绑包)中提供的数据。注意:否则为空。