zoukankan      html  css  js  c++  java
  • Android的Bundle传递数据的使用

    一、API文档说明

      1.介绍

        用于不同Activity之间的数据传递

              Bundle相当于Map类,就是一个映射,用Bundle绑定数据,便于数据处理

              通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取。

          2.使用

              Intent提供了多个重载方法来携带数据

              putExtras(Bundle data):向Intent中放入需要的数据包

              Bundle getExtras():取出Intent所携带的数据

              putExtras(String name, Xxx value):向Intent中按照key-value形式传值

              getXxxExtra(String name):从Intent中按key取值

              从上面方法中可以看到Bundle就像一个数据包一样,Bundle中存取数据的方法如下:

              pubXxx(String key, Xxx data):向Bundle中放入数据

              pubSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。

              getXxx(Strign key):从Bundle中取出数据

              getSerializable(String key, Serializable data):从Bundle中取出一个可序列化的对象。

              

             Activity还提供了一个startActivityForResult(Intent intent, int requestCode)方法来启动其他Activity。这样就需要如下两个条件:

               1、当前Activity需要重写onActivityResult(int requestCode, int resultCode, Intent intent)方法来获取返回的数据。

               2、被启动的Activty需要调用setResult方法设置处理结果。

      3.重要方法

        clear():清除此Bundle映射中的所有保存的数据。

        clone():克隆当前Bundle

        containsKey(String key):返回指定key的值

        getString(String key):返回指定key的字符

        hasFileDescriptors():指示是否包含任何捆绑打包文件描述符

        isEmpty():如果这个捆绑映射为空,则返回true

        putString(String key, String value):插入一个给定key的字符串值

        readFromParcel(Parcel parcel):读取这个parcel的内容

        remove(String key):移除指定key的值

        writeToParcel(Parcel parcel, int flags):写入这个parcel的内容

    bundle的实例:

          第一个Activity发出参数!

    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.MotionEvent; 

    public class TestBundle extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    public boolean onTouchEvent(MotionEvent event) { 
    Intent intent = new Intent(); 
    intent.setClass(TestBundle.this, Target.class); 
    Bundle mBundle = new Bundle(); 
    mBundle.putString("Data", "hello, bear");//压入数据 
    intent.putExtras(mBundle); 
    startActivity(intent); 
    finish(); 
    return super.onTouchEvent(event); 



    第二个Activity,接收参数

    import android.app.Activity; 
    import android.os.Bundle; 

    public class Target extends Activity{ 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Bundle bundle = getIntent().getExtras(); 
    String data=bundle.getString("Data");//读出数据 
    setTitle(data); 

    }

    另外onCreate(Bundle savedInstanceState) 中的savedInstanceState用于当前activity被切换之前保存临时数据,以便在下次返回时显示之前的数据的。

    因此在想使用Bundle savedInstanceState保存临时数据,就应该在onCreate(Bundle savedInstanceState)方法中提前写好savedInstanceState!=null时的逻辑。

    参照理解:http://blog.sina.com.cn/s/blog_652dd96d0100ug6h.html

    /*/

    与SharedPreferences的区别

      SharedPreferences是简单的存储持久化的设置,就像用户每次打开应用程序时的主页,它只是一些简单的键值对来操作。它将数据保存在一个xml文件中;

      Bundle是将数据传递到另一个上下文中或保存或回复你自己状态的数据存储方式。它的数据不是持久化状态。

  • 相关阅读:
    软件工程(2019)第一次作业
    Coding.net主页地址链接
    解决Oracle 11g重建em时报错创建档案资料库时出错以及删除原有em时报监听程序未启动
    解决VirtualBox与锐捷网络冲突的问题
    王道数据结构复习(一)
    第二次结对编程—四则运算自动生成程序
    软件工程(2019)结对编程第一次作业
    软件工程(2019)第三次个人作业——求最大子段和(于VS2017下代码覆盖单元测试)
    软件工程(2019)第二次作业
    软件工程第一次作业
  • 原文地址:https://www.cnblogs.com/banzhuan/p/6441366.html
Copyright © 2011-2022 走看看