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. [转]How to: Create a Custom Principal Identity

    本文转自:https://msdn.microsoft.com/en-us/library/aa702720(v=vs.110).aspx The PrincipalPermissionAttribu ...

  2. 关于IoCallDriver使用的疑惑

    #pragma PAGEDCODE NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) { KdPrint(("Dr ...

  3. 利用CSS3D效果制作简易旋转木马效果

    最近看一下css3d的一些特性,想着也实验学习一下,制作个小demo之类的.就练习了一下.开发一个粗糙的选择木马效果,如图 其实就是找到角度和位置,计算每根柱子的旋转角度摆放到3d空间的置顶位置即可. ...

  4. curl 小结

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...

  5. 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件

    环境:Windows 64位 PHP 版本: 框架:ThinkPHP Tips: 组件:打包的代码,可以是一系列相关的类(class).接口(interface).特性(trait),用于解决某个具体 ...

  6. 作业二:在github上过程

    注册Github

  7. checking for tgetent()... configure: error: NOT FOUND!

    今天centos出现了下面的异常: checking for tgetent()... configure: error: NOT FOUND! You need to install a termi ...

  8. magento -- 解决magento错误:ERROR: Base table or view already exists: 1050 Table ... already exists

    相信有更新magento或者,备份转移magento站点的时候可能会碰到类似这样的错误提示: Base table or view already exists: 1050 Table ... alr ...

  9. 解决ADB端口占用问题

    方式一5037为adb默认端口,若5037端口被占用,查看占用端口的进程PIDC:\Users\wwx229495>netstat -aon|findstr 5037   TCP    127. ...

  10. 整合Spring Data JPA与Spring MVC: 分页和排序

    之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...