Intent四种数据传递方式

Intent四种数据传递方式

MainActivity中传值操作 

class MainActivity extends AppCompatActivity 

    /**

    * 当一个Activity创建时会调用该方法,通过我们可以在该方法中进行组件的初始化工作

    * @param savedInstanceState

    */

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        System.out.println("MainActivity-onCreate");

    }

    /**

    * 在Activity可见,但还不能进行交互时会调用该方法

    * 在onCreate之后调用

    */

    @Override

    protected void onStart() {

        super.onStart();

        System.out.println("MainActivity-onStart");

    }

    /**

    * 当Activity可以交互时调用

    * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态

    * resumed状态

    */

    @Override

    protected void onResume() {

        super.onResume();

        System.out.println("MainActivity-onResume");

    }

    /**

    * 一个从stoped状态的Activity重新被激活时调用

    * 接着会调用onStart()方法

    */

    @Override

    protected void onRestart() {

        super.onRestart();

        System.out.println("MainActivity-onRestart");

    }

    /**

    * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互

    * 那么此时当前Activity进入了paused状态(暂停状态)

    * 当此状态下Activity重新获取焦点时会再调用onResume()方法

    */

    @Override

    protected void onPause() {

        super.onPause();

        System.out.println("MainActivity-onPause");

    }

    /**

    * 当前Activity被另一个Activity完全覆盖,不可见且不可交互

    * 那么此时当前Activity进入了stoped状态(停止状态)

    * 此状态下的Activity被重新显示时,会调用OnRestart()方法

    */

    @Override

    protected void onStop() {

        super.onStop();

        System.out.println("MainActivity-onStop");

    }

    /**

    * 当前Activity被销毁时调用,表示结束生命周期

    */

    @Override

    protected void onDestroy() {

        super.onDestroy();

        System.out.println("MainActivity-onDestroy");

    }


    public void activityClick(View v){

        //打开另一个Activity,一个Intent对象代表一个意图

        Intent intent = new Intent(this,Main2Activity.class);

        //给Activity传值方式一:创建一个Bundle对象封装数据

        Bundle data = new Bundle();

        data.putInt("id",1);

        data.putString("name","宏才");

        data.putFloat("age",20.5f);

        intent.putExtra("data",data);

        //给Activity传值方式二:使用Intent准备的Bundle对象

//        intent.putExtra("id",1);

//        intent.putExtra("name","大雷");

//        intent.putExtra("age",18.5f);

        startActivity(intent);//启动Activity

    }

  /**

    * 方式三:传递对象数据

    * @param view

    */

    public void sendObjectClick(View view){

        Intent intent = new Intent(this,Main2Activity.class);

        User user = new User();

        user.setId(1);

        user.setName("宏才");

        user.setSex("男");

        intent.putExtra("user",user);//user对象必须实现序列化接口

        startActivity(intent);

    }

/**

    * 方式四:使用parcelable传递对象

    * @param view

    */

    public void parcelableClick(View view){

        Dog dog = new Dog();

    dog.setName("tom");

    dog.setSex("公");

    dog.setAge(5);

    Intent intent = new Intent(this,Main2Activity.class);

    intent.putExtra("dog",dog);

    startActivity(intent);

  }

}

Main2Activity 接收数据的对应操作

public class Main2Activity extends AppCompatActivity {

    private TextView textView2_data,textView2_user,textView2_parcelable_dog;

    /**

    * 当一个Activity创建时会调用该方法,通过我们可以在该方法中进行组件的初始化工作

    * @param savedInstanceState

    */

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);

        System.out.println("Main2Activity-onCreate");

        textView2_data = (TextView) findViewById(R.id.textView2_data);

        textView2_user = (TextView) findViewById(R.id.textView2_user);

        textView2_parcelable_dog = (TextView) findViewById(R.id.textView2_parcelable_dog);

        Intent intent = getIntent();

        System.out.println("2-"+intent);

        //方式一取值

//        Bundle data = intent.getBundleExtra("data");

//        int id = data.getInt("id");

//        String name = data.getString("name");

//        float age = data.getFloat("age");

        //方式二取值

//        int id = intent.getIntExtra("id",0);

//        String name = intent.getStringExtra("name");

//        float age = intent.getFloatExtra("age", 18f);

//

//        textView2_data.setText("id="+id+",name="+name+",age="+age);

        //方式三取值

//        User user = (User) intent.getSerializableExtra("user");

//        textView2_user.setText(user.toString());

        //方式四取值

        Dog dog = intent.getParcelableExtra("dog");

        textView2_parcelable_dog.setText(dog.toString());

    }

    /**

    * 在Activity可见,但还不能进行交互时会调用该方法

    * 在onCreate之后调用

    */

    @Override

    protected void onStart() {

        super.onStart();

        System.out.println("Main2Activity-onStart");

    }

    /**

    * 当Activity可以交互时调用

    * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态

    * resumed状态

    */

    @Override

    protected void onResume() {

        super.onResume();

        System.out.println("Main2Activity-onResume");

    }

    /**

    * 一个从stopped状态的Activity重新被激活时调用

    * 接着会调用onStart()方法

    */

    @Override

    protected void onRestart() {

        super.onRestart();

        System.out.println("Main2Activity-onRestart");

    }

    /**

    * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互

    * 那么此时当前Activity进入了paused状态(暂停状态)

    * 当此状态下Activity重新获取焦点时会再调用onResume()方法

    */

    @Override

    protected void onPause() {

        super.onPause();

        System.out.println("Main2Activity-onPause");

    }

    /**

    * 当前Activity被另一个Activity完全覆盖,不可见且不可交互

    * 那么此时当前Activity进入了stopped状态(停止状态)

    * 此状态下的Activity被重新显示时,会调用OnRestart()方法

    */

    @Override

    protected void onStop() {

        super.onStop();

        System.out.println("Main2Activity-onStop");

    }

    /**

    * 当前Activity被销毁时调用,表示结束生命周期

    */

    @Override

    protected void onDestroy() {

        super.onDestroy();

        System.out.println("Main2Activity-onDestroy");

    }

    public void openActivity(View v){

        //打开另一个Activity,一个Intent对象代表一个意图

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

        startActivity(intent);//启动Activity

    }

}

Parcelable传值时 对象的准备:

public class Dog implements Parcelable{

    private String name;

    private String sex;

    private int age;

    //对象的创建器(我们目的是要从包裹里把数据取出来,并封装成对象(Dog))

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){

        //从包裹里把数据取出来

        @Override

        public Dog createFromParcel(Parcel source) {

            System.out.println("createFromParcel");

            Dog dog = new Dog();

            dog.setName(source.readString());

            dog.setSex(source.readString());

            dog.setAge(source.readInt());

            return dog;

        }

        @Override

        public Dog[] newArray(int size) {

            return new Dog[size];

        }

    };

   

 /**

    * 内容的描述标记(通常使用默认实现)

    * @return

    */

    @Override

    public int describeContents() {

        return 0;

    }

    /**

    * 打包,把数据写入包裹对象

    * @param dest

    * @param flags

    */

    @Override

    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(name);

        dest.writeString(sex);

        dest.writeInt(age);

    }

public String getName() {

    return name; }

public void setName(String name) {

    this.name = name; }

public String getSex() {

    return sex; }

public void setSex(String sex) {

    this.sex = sex; }

public int getAge() {

    return age; }

 public void setAge(int age) {

    this.age = age; }

@Override

 public String toString() {

 return "Dog{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; }

 }

感兴趣可以加Java架构师群获取Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群..号是:855801563 对了 小白勿进 最好是有开发经验

注:加群要求

1、具有工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

你可能感兴趣的:(Intent四种数据传递方式)