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

  • 相关阅读:
    开发ProxyServer的时候如何在一台PC上调试
    eclipse使用replace命令替换整个project/workspace的某个字符串
    android程序获取WIFI的IP地址和MAC地址
    将web项目deploy到tomcat的方法
    Windows下搭建Android开发环境
    解决:并排的两个div底部对齐
    eclipse调试jsp中的scriptlet代码
    棋盘覆盖(递归分治问题)
    Java中sleep()和wait()的区别
    Random()方法的使用
  • 原文地址:https://www.cnblogs.com/banzhuan/p/6441366.html
Copyright © 2020-2023  润新知