Intent 是Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组
件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动
服务、以及发送广播等场景

   // A activity调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);  // 创建视图
        setContentView(R.layout.my_layout);
        // 找到对应的button来监听事件
        findViewById(R.id.butStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, AnotherAty.class);
                i.putExtra("data", "hello word");  // 使用Intent来传参
                startActivity(i);
            }
        });
        System.out.println("onCreate");
    }
    //B activity 通过Intent来获取值,并显示在textView上面
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        Intent i = getIntent();  //直接获取传过来的intent
        tv = (TextView)findViewById(R.id.textView);
        tv.setText(i.getStringExtra("data"));
    }

// 如果数据比较多,可以通过 Bundle  数据包来传递数据

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);  // 创建视图
        setContentView(R.layout.my_layout);
        // 找到对应的button来监听事件
        findViewById(R.id.butStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, AnotherAty.class);
                //i.putExtra("data", "hello word");  // 使用Intent来传参
                Bundle b = new Bundle();  // 打包数据
                b.putString("name", "chengzhier");
                b.putInt("age", 2);

                i.putExtras(b);
                startActivity(i);
            }
        });
        System.out.println("onCreate");
    }

private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        Intent i = getIntent();  //直接获取传过来的intent
        tv = (TextView)findViewById(R.id.textView);

        //i.getStringExtra("data")
        Bundle data = i.getExtras();
        String s = String.format("name=%s, age=%d", data.getString("name"), data.getInt("age"));
        tv.setText(s);
    }

// 传递一个对象 java 自带的 Serializable 虚拟化


// User类
public class User implements Serializable{  //让这个对象序列化
    private String name;
    private int age;

    public User(int age, String name ) {
        this.age = age;
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}

// A activity
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);  // 创建视图
        setContentView(R.layout.my_layout);
        // 找到对应的button来监听事件
        findViewById(R.id.butStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, AnotherAty.class);

                i.putExtra("user", new User(2, "zh"));

                startActivity(i);
            }
        });
        System.out.println("onCreate");
    }

// B activiry
 private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        Intent i = getIntent();  //直接获取传过来的intent
        tv = (TextView)findViewById(R.id.textView);
        User u = (User)i.getSerializableExtra("user");  //取出来

        String s = String.format("测试11name=%s, age=%d", u.getName(), u.getAge());
        tv.setText(s);
    }

//传递一个对象 安卓专门的Parcelable虚拟化

/**
 * Created by ZhouXiaoHai on 2016/9/8.
    User 类
 */
public class User implements Parcelable{  // 安卓自带的序列化
    private int age;
    private String name;
    private String dogName;

    public void setDogName(String dogName) {
        this.dogName = dogName;
    }

    public String getDogName() {
        return dogName;
    }

    public User(int age, String name, String dogName) {
        this.age = age;
        this.name = name;
        this.dogName = dogName;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {  // 必须要写的 接口 Parcelable 的方法
        // 这个一定要按变量顺序写
        dest.writeInt(getAge());
        dest.writeString(getName());
        dest.writeString(getDogName());
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            // 这个一定要按变量顺序写
            return new User( source.readInt(), source.readString(), source.readString());
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}

//A activity
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);  // 创建视图
        setContentView(R.layout.my_layout);
        // 找到对应的button来监听事件
        findViewById(R.id.butStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, AnotherAty.class);

                i.putExtra("user", new User(2, "zh", "旺财"));

                startActivity(i);
            }
        });
        System.out.println("onCreate");
    }

//B activity
private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        Intent i = getIntent();  //直接获取传过来的intent
        tv = (TextView)findViewById(R.id.textView);
        //User u = (User)i.getSerializableExtra("user");
        User u = (User)i.getParcelableExtra("user");

        String s = String.format("测试21name=%s, age=%d 狗的名字=%s", u.getName(), u.getAge(), u.getDogName());
        tv.setText(s);
    }

简单总结(小白): Serializable 比 Parcelable 使用起来方便,直接实现接口就好了,但是效率不高。  Parcelable效率高,但是需要自己写一些代码。

Intent传参数的更多相关文章

  1. intent 传参数

    一.传递List<String>和List<Integer>以下以传递List<String>为例,发送List<String>语法为:intent.p ...

  2. 传参数应该用哪种形式&mdash;&mdash;值、引用、指针?

    类型:C++ & Qt4,创建时间:十二月 30, 2011, 7:43 p.m. 标题无"转载"即原创文章,版权所有.转载请注明来源:http://hgoldfish.c ...

  3. Mybatis传参数

    1使用@Param注解传参数 mapper接口:public void updateUser(@Param("user")User user)throws Exception; m ...

  4. 如何给main传参数

    main 函数的参数有连个argc argcv[]  argc 是参数个数 argcv是参数的数组指针,且argcv的第一个参数是默认程序路径加程序名 给main传参数,需要在命令行启动程序时设置 如 ...

  5. mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]

    如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...

  6. Chrome和Firefox浏览器执行new Date() 函数传参数得到不同结果的陷阱

    某日,同事问到关于new Date() 函数传参数,在火狐浏览器和谷歌浏览器控制台运行,会得到不同的结果,刚开始觉得不可能,后来实际操作才发现此陷阱 var date = new Date('2014 ...

  7. web service上传参数代码实例

    web service上传参数代码实例 这次做的项目用到webservice比较多,最开始在网上看的参考dome,发现都不行,后来发现安卓4.0以后有很大的不同,在做传参时,有些东西需要注意: 第一, ...

  8. spring mvc 传参数

    1.页面:(1)js传参数:location.href="${ctx }/forum/changeCtm.html?ctmId="+id; (2)将内容写在form表单里面,然后用 ...

  9. 关于main函数传参数的问题

    argc是命令行总的参数个数      argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数      命令行后面跟的用户输入的参数,比如:      int   main(int   ...

随机推荐

  1. C#线程同步自动重置事件——AutoResetEvent

    AutoResetEvent对象用来进行线程同步操作,AutoResetEvent类继承waitHandle类. AutoResetEvent对象有终止和非终止两种状态,终止状态是线程继续执行,非终止 ...

  2. 破解Java to C# Converter

    起因 最近在对接一个第三方平台.该平台只提供了Java版本的SDK,C#版本的还处于敬请期待状态.由于C#可以复用绝大部分代码,便考虑找一个Java到C#的转换器,在试用了几个软件之后,发现还是Jav ...

  3. 最简单jquery轮播图效果

    样式部分 <style type="text/css"> *{;;} ul,ol{list-style:none;} #box{width:420px;height:6 ...

  4. git config --global core.autocrlf false

    git config --global core.autocrlf  false warning: LF will be replaced by CRLF in .idea/vcs.xml.The f ...

  5. [USACO2002][poj1947]Rebuilding Roads(树形dp)

    Rebuilding RoadsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8589 Accepted: 3854Descrip ...

  6. jQuery 事件用法详解

    jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...

  7. java Process的waitFor()

    java Process的waitFor() 在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本.在Java中提供了两种方法来启动其他程序: (1) 使用Runtim ...

  8. Windows Services windows域账户管理

    windows  域账户管理 一.什么是域账户: 域账户是域是网络对象的分组.例如:用户.组和计算机.域中所有的对象都存储在 Active Directory 下.Active Directory 可 ...

  9. WebAPi(selfhost)

    ASP.NET WebAPi(selfhost)之文件同步或异步上传   前言 前面我们讲过利用AngularJs上传到WebAPi中进行处理,同时我们在MVC系列中讲过文件上传,本文结合MVC+We ...

  10. 用shell写个100以内的所有数字之和

    #!/bin/bash i=2 while ((i<=100));do j=2 while ((j<=i/2));do if ((i%j==0));then break fi let j+ ...