什么是Android应用程序中的“包”
Android应用程序中的bundle
是什么? 何时使用它?
Bundles通常用于在各种Android活动之间传递数据。 它取决于你想传递什么types的值,但bundle可以保存所有types的值,并将它们传递给新的活动。
你可以像这样使用它:
Intent intent = new... Intent(getApplicationContext(), SecondActivity.class); intent.putExtra("myKey", AnyValue); startActivity(intent);
您可以通过执行以下操作获取传递的值:
Bundle extras = intent.getExtras(); String tmp = extras.getString("myKey");
你可以find更多的信息:
-
android-using-bundle-for-sharing-variables和
-
假冒捆绑围绕头活动
我必须补充一下,活动使用bundle来将数据传递给自己。
当屏幕旋转时,或者当另一个活动开始时,调用protected void onSaveInstanceState(Bundle outState)
方法,并且活动被破坏。 稍后,创build另一个活动实例,并调用public void onCreate(Bundle savedInstanceState)
。 当第一个活动实例被创build时,这个bundle是空的; 如果这个捆绑不是空的,那么这个活动将继续其前身开始的一些业务。
Android会自动将文本保存在文本字段中,但不会保存所有内容,有时会出现细微的错误。
然而,最常见的反模式是假定onCreate()
只是初始化。 这是错误的,因为它也必须恢复状态。
有一个选项可以禁用这个“重新创build循环活动”的行为,但是不会阻止与重启有关的错误,这只会让他们更加难以提及。
还要注意的是,当活动将要被销毁的时候,保证调用的唯一方法是onPause()
。 (请参阅文档中的活动生命周期图)
通过使用Bundle
和Intent
对象在活动之间传递数据 。
你首先创build一个Bundle
对象
Bundle b = new Bundle();
然后,将存储在anystring
中的string数据与捆绑键"myname"
b.putString("myname", anystring);
现在,创build一个Intent
对象
Intent in = new Intent(getApplicationContext(), secondActivity.class);
将bundle对象b
传递给intent
in.putExtras(b);
并开始第二个活动
startActivity(in);
在第二个活动中,我们必须访问从第一个活动传递的数据
Intent in = getIntent();
现在,您需要从捆绑中获取数据
Bundle b = in.getExtras();
最后,获取与名为"myname"
键相关联的string数据的值
String s = b.getString("myname");
Bundle
非常类似于将String
键映射到值的Java Map
对象。 它用于在活动和其他应用程序组件之间传递信息。 它也被框架用来捕获和恢复状态信息。
Android不使用普通的旧Map
对象的原因是Map
太灵活了, 它可以包含无法序列化的对象(比如说,I / Ostream)。 Bundle
API限制了可以添加到一个bundle的对象的types,使得bundle的内容保证是可序列化的。 Android框架依赖于这个属性。
我build议您阅读应用基础知识的文档。 除此之外,这解释了捆绑和意图是什么以及它们被用于什么目的。
Bundles可以用于通过Intents将任意数据从一个活动发送到另一个活动。 当您播放一个意图时,感兴趣的活动(和其他BroadcastRecievers)将被通知这一点。 一个意图可以包含一个Bundle,以便您可以发送额外的数据与意图。
Bundle是键值映射,所以它们就像一个Hash,但并不严格局限于一个String / Foo对象映射。 请注意,只有特定的数据types才被视为“Parcelable”,它们在Bundle API中被明确地拼写出来。
只要创build一个包,
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用于在活动之间传递数据。 您可以创build一个捆绑包,将其传递给Intent,从而启动可从目标活动使用的活动。
Bundle:从String值到各种Parcelabletypes的映射。
Bundle通常用于在android的各种活动之间传递数据。
当我们调用onPause()然后onStop(),然后以相反的顺序onStop()onPause()。
系统用于恢复以前状态的已保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。
bundle用于在活动之间共享数据,并在oncreate()方法中保存应用程序的状态,以便应用程序知道它停止的位置…我希望它有助于:)
包的使用借助于intent对象将数据从一个活动发送到另一个活动; Bundle保存可以是任何types的数据。
现在我告诉如何在两个活动之间创build数据包传递数据。
第1步:在第一个活动
Bundle b=new Bundle(); b.putString("mkv",anystring); Intent in=new Intent(getApplicationContext(),secondActivity.class); in.putExtras(b); startActivity(in);
第二步:关于第二个活动
Intent in=getIntent(); Bundle b=in.getExtras(); String s=b.getString("mkv");
我认为这对你有用………..
第一次活动:
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");
Bundle不仅仅是在两个不同的组件之间传输数据,更重要的是它被用来恢复在活动被破坏之前存储的值到新的活动中。
如EditText
小部件中的文本或ListView
的滚动位置。