Answers:
捆绑包通常用于在各种Android活动之间传递数据。这取决于您要传递的值的类型,但是捆绑包可以容纳所有类型的值并将其传递给新活动。
您可以像这样使用它:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
您可以通过执行以下操作获取传递的值:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
您可以在以下位置找到更多信息:
使用Bundle
和Intent
对象在活动之间传递数据。
您的第一个Bundle
对象
Bundle b = new Bundle();
然后,将存储在anystring
其中的字符串数据与捆绑密钥相关联"myname"
b.putString("myname", anystring);
现在,创建一个Intent
对象
Intent in = new Intent(getApplicationContext(), secondActivity.class);
将捆绑对象传递b
给意图
in.putExtras(b);
然后开始第二个活动
startActivity(in);
在第二个活动中,我们必须访问从第一个活动传递的数据
Intent in = getIntent();
现在,您需要从包中获取数据
Bundle b = in.getExtras();
最后,获取与名为key的键关联的字符串数据的值 "myname"
String s = b.getString("myname");
我必须补充一点,活动将来会使用捆绑包将数据传递给自己。
当屏幕旋转或启动另一个活动时,将protected void onSaveInstanceState(Bundle outState)
调用该方法,并销毁该活动。稍后,将创建并public void onCreate(Bundle savedInstanceState)
调用该活动的另一个实例。创建活动的第一个实例时,捆绑商品为空;如果bundle不为空,则该活动将继续由其前身启动的某些业务。
Android会自动将文本保存在文本字段中,但不会保存所有内容,有时会出现细微的错误。
不过,最常见的反模式是假设onCreate()
仅进行初始化。这是错误的,因为它还必须恢复状态。
有一个选项可以禁用这种“旋转时重新创建活动”行为,但是它不会阻止与重启相关的错误,只会使它们更难于提及。
还要注意,在活动将被销毁时可以保证其调用的唯一方法是onPause()
。(请参阅文档中的活动生命周期图。)
捆绑包可用于通过意图将任意数据从一个活动发送到另一个活动。当您广播Intent时,有兴趣的活动(和其他BroadcastRecievers)将收到通知。一个意图可以包含一个包,以便您可以与该意图一起发送额外的数据。
捆绑包是键值映射,因此在某种程度上,它们就像哈希一样,但并不严格限于单个String / Foo对象映射。请注意,只有某些数据类型被认为是“可打包的”,并且在Bundle API中明确说明了它们。
只需创建一个捆绑包,
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
在“ this_is_the_next_class.class”中
您可以像这样检索项目。
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
bundle用于在活动之间共享数据,并在oncreate()方法中保存应用程序的状态,以便应用程序知道停止在何处...希望对您有所帮助:)
使用包在意图对象的帮助下将数据从一个活动发送到另一个活动;捆绑存放可以是任何类型的数据。
现在,我介绍了如何创建两个活动之间传递数据包的捆绑包。
步骤1:第一次活动
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
步骤2:第二次活动
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
我认为这对您有用。
Bundle不仅用于在两个不同组件之间传输数据,而且更重要的是,它用于恢复在活动被销毁为新活动之前存储的值。
例如EditText
小部件中的文本或的滚动位置ListView
。
第一次活动:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
第二项活动:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");