`
aliusa
  • 浏览: 82641 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Activity间传递数据

阅读更多
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.传递自定义的序列化对象
自定义序列化类
public class Contacts implements Parcelable {
    public static final String PARCELABLE_KEY = "aliusa.cn.ui.Contacts.parcelableKey"; 
    private int id;
    private String name;

    public Contacts(int id,String name){
        this.name = name;
        this.id = id;
    }
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public int describeContents() {
        return 0;
    }

   //关键的事
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        
        dest.writeInt(id);  
        dest.writeString(name);
    }
    
    //关键的事情   
    public static final Parcelable.Creator<Contacts> CREATOR = new Parcelable.Creator<Contacts>() {   
        public Contacts createFromParcel(Parcel in) {   
            return new Contacts(in);   
        }   
  
        public Contacts[] newArray(int size) {   
            return new Contacts[size];   
        }   
    };   
    
    //关键的事
    private Contacts(Parcel in) {   
        id = in.readInt();  
        name = in.readString();
    }
}

传递参数
         Contacts contact = new Contacts("0001", "aliusa");
        Bundle bundle = new Bundle();   
        bundle.putParcelable(Contacts.PARCELABLE_KEY , contact);
        intent.putExtra(parcelableKey, contact); 


读取参数

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);
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics