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是将数据传递到另一个上下文中或保存或回复你自己状态的数据存储方式。它的数据不是持久化状态。

  • 相关阅读:
    Django的常用方法以及配置
    orm 练习题
    Codeforces 898 贪心关闭最少闹钟 优先队列最少操作构造N/2squares 讨论情况哈希数字串分割a+b=c
    Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列
    At grand 024
    Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location 扩展欧几里得方块内光线反射
    Codeforces 984 扫雷check 欧几里得b进制分数有限小数判定 f函数最大连续子段
    Codeforces 979 字符串强制N变换最多出现字母 DFS子树 暴力01字典树
    Codeforces 899 1-N两非空集合最小差 末尾最多9对数计算 pair/链表加优先队列最少次数清空
    Atcoder Regular 097 相邻球交换目的递增DP
  • 原文地址:https://www.cnblogs.com/banzhuan/p/6441366.html
Copyright © 2011-2022 走看看