Acitvity之间数据传递

Activity之间跳转,传值,主要是通过intent来连接,以及传递数据。
1.通过intentest.putExtra(“key,字符串”, value(基本数据类型));
Intent test = new  Intent();
test = putExtra("name", true);
包括:
public Intent putExtra (String name, double[] value)
public Intent putExtra (String name, int value)
public Intent putExtra (String name, CharSequence value)
public Intent putExtra (String name, char value)
public Intent putExtra (String name, float value)
public Intent putExtra (String name, byte[] value)
public Intent putExtra (String name, Serializable value) 
。。。。。。
2.通过Bundle
public Intent putExtra (String name, Bundle value);
public Intent putExtra (Bundle value);
Bundle类用作携带数据,类似于map。他存储的是 key-value的键值对。
通过put与get方法分别存取各种类型的数据
public void putString (String key, String value)
public String getString (String key)
下面详细介绍Bundle:
原文出处:
http://www.cnblogs.com/salam/archive/2010/10/27/1862730.html

3.传递自定义的序列化对象
自定义序列化类
Java代码   收藏代码
  1. public class Contacts implements Parcelable {  
  2.     public static final String PARCELABLE_KEY = "aliusa.cn.ui.Contacts.parcelableKey";   
  3.     private int id;  
  4.     private String name;  
  5.   
  6.     public Contacts(int id,String name){  
  7.         this.name = name;  
  8.         this.id = id;  
  9.     }  
  10.       
  11.     public int getId() {  
  12.         return id;  
  13.     }  
  14.   
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.   
  28.     @Override  
  29.     public int describeContents() {  
  30.         return 0;  
  31.     }  
  32.   
  33.    //关键的事  
  34.     @Override  
  35.     public void writeToParcel(Parcel dest, int flags) {  
  36.           
  37.         dest.writeInt(id);    
  38.         dest.writeString(name);  
  39.     }  
  40.       
  41.     //关键的事情     
  42.     public static final Parcelable.Creator<Contacts> CREATOR = new Parcelable.Creator<Contacts>() {     
  43.         public Contacts createFromParcel(Parcel in) {     
  44.             return new Contacts(in);     
  45.         }     
  46.     
  47.         public Contacts[] newArray(int size) {     
  48.             return new Contacts[size];     
  49.         }     
  50.     };     
  51.       
  52.     //关键的事  
  53.     private Contacts(Parcel in) {     
  54.         id = in.readInt();    
  55.         name = in.readString();  
  56.     }  
  57. }  

Java代码   收藏代码
  1. 传递参数  
  2.          Contacts contact = new Contacts("0001""aliusa");  
  3.         Bundle bundle = new Bundle();     
  4.         bundle.putParcelable(Contacts.PARCELABLE_KEY , contact);  
  5.         intent.putExtra(parcelableKey, contact);   


Java代码   收藏代码
  1. 读取参数  
  2.   
  3. final Contacts contact = (Contacts) getIntent().getExtras().getParcelable(Contacts.PARCELABLE_KEY);  
一、API文档说明

  1.介绍

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

  1.重要方法

    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的内容

二、实例
    //FirstActivity putdata
   。。。。。。
        Intent intent = new Intent();
        intent.setClass(FirstActivity.this, NextActivity.class);
        Bundle mBundle = new Bundle();
        //put data
        mBundle.putString("name", "aliusa"); 
        intent.putExtras(mBundle);
        startActivity(intent);
   。。。。。。
   //NextActivity getData
   。。。。。。
        //get data
        Bundle b=getIntent().getExtras();   
        String info=b.getString("name");  
        System.out.println("name ="+info);
   。。。。。。

三、与SharedPreferences的区别

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

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

3.startActivityForResult(itent, int requestCode)
如果我们想在secondeActivity关闭的时候告知开启它的activity好做相应的处理的时候可以用
startActivityForResult(itent, int requestCode)配合
onActivityResult(int requestCode, int resultCode, Intent data){};来解决。
解释:
int requestCode,请求码,用于标识请求源,也就是区分什么地方开启了他。
int requestCode,结果码,标识什么时候关闭该页面返回。
Intent data,可以在关闭页面的时候,通过intent向上一个页面传递参数。
举例:
   。。。。。。
  在fistActivity中开启SecondActivity
  final long index = 2000;
  final Intent itent = new Intent(context,MergeDetailActivity.class);
  itent.putExtra(“index”, index);
  startActivityForResult(itent, CODE_MERGE_SUBMIT);

  在SecondActivity中取值
  Intent intent = getIntent();
  int index= intent.getLongExtra(“index”, 0);

  在secondActivity关闭的时候put data
  final Intent data = new Intent();
  data.putExtra(“index”,index );
  setResult(1, data);
  finish();

  secondeActivity关闭后在firstActivity中get Data
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == 1) {
            final int index = data.getLongExtra(“index”, -1);
            // do some special
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值