• Android_Intent_passObject


    方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象
    需要考虑对Person对象进行序列化

    MainActivity:

    package com.example.day06_activity4;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void btn_click(View view) {
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, OtherActivity.class);
            // 创建一个Person对象,并通过intent传递到OtherActivity
            Person person = new Person("志明", 40, 333.3);
            intent.putExtra("person", person);
            startActivity(intent);
        }
    }

    OtherActivity:

    package com.example.day06_activity4;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TextView;
    
    public class OtherActivity extends Activity {
        private TextView textview;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_other);
            textview = (TextView) findViewById(R.id.text);
            // 获得intent
            Intent intent = getIntent();
            Person person = intent.getParcelableExtra("person");
            String name = person.getName();
            int age = person.getAge();
            double weight = person.getWeight();
            
            textview.setText("姓名:" + name + ", 年龄:" + age + ", 体重:" + weight);
        }
    
    
    }

    Person

    package com.example.day06_activity4;
    
    import android.os.Parcel;
    import android.os.Parcelable;
    
    public class Person implements Parcelable {
    
        private String name;
        private int age;
        private double weight;
    
        public Person() {
        }
    
        public Person(String name, int age, double weight) {
            super();
            this.name = name;
            this.age = age;
            this.weight = weight;
        }
    
        // getXxx()方法和setXxx()方法
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public double getWeight() {
            return weight;
        }
    
        public void setWeight(double weight) {
            this.weight = weight;
        }
    
        // 实现Parcelable接口中的抽象方法
        // describeContents()方法基本上直接返回0,就可以了
        public int describeContents() {
            return 0;
        }
        // 把需要序列化的参数写入out中
        public void writeToParcel(Parcel out, int flags) {
            out.writeString(name);
            out.writeInt(age);
            out.writeDouble(weight);
        }
        // 定义一个静态的属性CREATOR 是Parcelable.Creator的对象
        // 在该匿名内部类中,实现Parcelable.Creator中的两个方法(泛型参数为类名)
        public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
            // createFromParcel(Parcel in)
            // 对in进行反序列化(需要通过Person的构造器实现)
            public Person createFromParcel(Parcel in) {
                return new Person(in);
            }
            // newArray(Parcel in)
            // 反序列化多个元素时使用
            public Person[] newArray(int size) {
                return new Person[size];
            }
        };
        // 定义私有的构造器 从in中反序列对应的参数(反序列化参数的顺序必须与序列化参数的顺序保持一致)
        private Person(Parcel in) {
            name = in.readString();
            age = in.readInt();
            weight = in.readDouble();
        }
    }
  • 相关阅读:
    symbol
    es6的对象新增的方法
    关于一个有趣的知识
    我为什么要记笔记?
    学习 yjango 博士的学习方法后的总结
    关于写博客的好处
    这是一片博客的测试
    【牛客19】(思路)
    【HDOJ】find your present (2)(思路题)
    【素数】Eratosthenes筛选
  • 原文地址:https://www.cnblogs.com/fangg/p/5566247.html
Copyright © 2020-2023  润新知