• android: Intent启动activity


    使用Intent启动activity:

    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    
    startActivity(intent);

    使用Intent启动其他app的activity:

    Intent intent = new Intent();
    intent.setClassName("com.example.project1","com.example.project1.MainActivity");
    startActivity(intent);
    com.example.project1是AndroidManifest.xml文件中的package值,
    com.example.project1.MainActivity是目标Activity的完整类名。


    Intent传值:
    intent.putExtra("key", value);

    Intent传类实例:
    User user=new User("cc","lulu");
    intent.putExtra("obj",user);
    //getIntent().getSerializableExtra("obj");
    或者:
    User user=new User("cc","lulu");
    Bundle bundle=new Bundle();
    bundle.putSerializable("obj", user);
    intent.putExtra("obj", bundle);

    User类必须实现Serializable接口。

    Parcelable方式:

    public class User2 implements Parcelable {
        private String name;
        private String password;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public User2() {
        }
    
        public User2(String name, String password) {
            super();
            this.name = name;
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", password=" + password + "]";
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        /**
         * 调用Parcel#writeXXX()方法把User2字段一一写出。类型要对应。
         */
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeString(password);
    
        }
    
        /**
         * 必须提供一个名为CREATOR的常量。
         */
        public static final Parcelable.Creator<User2> CREATOR = new Parcelable.Creator<User2>() {
    
            /**
             * 调用Parcel#readXxx()方法,读取顺序必须与写出顺序相同。
             */
            @Override
            public User2 createFromParcel(Parcel source) {
                User2 user2 = new User2();
                user2.name = source.readString();
                user2.password = source.readString();
                return user2;
            }
    
            /**
             * new出一个数组
             */
            @Override
            public User2[] newArray(int size) {
                return new User2[size];
            }
    
        };
    }

    存数据:

    Intent intent=new Intent(MainActivity.this,OtherActivity.class);
    User2 user2=new User2("cc","lubang");
    intent.putExtra("obj", user2);
    startActivity(intent);

    取数据:

    User2 user = intent.getParcelableExtra("obj");
    Log.i("OtherActivity", user.toString());

    Parcelable传递数据效率更高。

  • 相关阅读:
    用MySQL 生成随机密码增加大写处理
    【100题】第三十八 (天平称重、大输入流、去除重复URL)
    【编程珠玑】代码优化的27条经典法则
    cocos2dx:如何快速屏蔽触摸
    【2012百度之星资格赛】A:百度计算器的加法
    【2012百度之星资格赛】C:易手机的套餐
    去掉xcode编译warning:ld: warning: directory not found for option 'L
    【2012百度之星资格赛】D:共同狂欢
    【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
    linux shell 之在线文本编辑sed
  • 原文地址:https://www.cnblogs.com/mada0/p/4817327.html
Copyright © 2020-2023  润新知