博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intent四种数据传递方式
阅读量:5944 次
发布时间:2019-06-19

本文共 6432 字,大约阅读时间需要 21 分钟。

MainActivity中传值操作 public class MainActivity extends AppCompatActivity {

/** * 当一个Activity创建时会调用该方法,通过我们可以在该方法中进行组件的初始化工作 * @param savedInstanceState */@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    System.out.println("MainActivity-onCreate");}/** * 在Activity可见,但还不能进行交互时会调用该方法 * 在onCreate之后调用 */@Overrideprotected void onStart() {    super.onStart();    System.out.println("MainActivity-onStart");}/** * 当Activity可以交互时调用 * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态 * resumed状态 */@Overrideprotected void onResume() {    super.onResume();    System.out.println("MainActivity-onResume");}/** * 一个从stoped状态的Activity重新被激活时调用 * 接着会调用onStart()方法 */@Overrideprotected void onRestart() {    super.onRestart();    System.out.println("MainActivity-onRestart");}/** * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互 * 那么此时当前Activity进入了paused状态(暂停状态) * 当此状态下Activity重新获取焦点时会再调用onResume()方法 */@Overrideprotected void onPause() {    super.onPause();    System.out.println("MainActivity-onPause");}/** * 当前Activity被另一个Activity完全覆盖,不可见且不可交互 * 那么此时当前Activity进入了stoped状态(停止状态) * 此状态下的Activity被重新显示时,会调用OnRestart()方法 */@Overrideprotected void onStop() {    super.onStop();    System.out.println("MainActivity-onStop");}/** * 当前Activity被销毁时调用,表示结束生命周期 */@Overrideprotected 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之后调用 */@Overrideprotected void onStart() {    super.onStart();    System.out.println("Main2Activity-onStart");}/** * 当Activity可以交互时调用 * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态 * resumed状态 */@Overrideprotected void onResume() {    super.onResume();    System.out.println("Main2Activity-onResume");}/** * 一个从stopped状态的Activity重新被激活时调用 * 接着会调用onStart()方法 */@Overrideprotected void onRestart() {    super.onRestart();    System.out.println("Main2Activity-onRestart");}/** * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互 * 那么此时当前Activity进入了paused状态(暂停状态) * 当此状态下Activity重新获取焦点时会再调用onResume()方法 */@Overrideprotected void onPause() {    super.onPause();    System.out.println("Main2Activity-onPause");}/** * 当前Activity被另一个Activity完全覆盖,不可见且不可交互 * 那么此时当前Activity进入了stopped状态(停止状态) * 此状态下的Activity被重新显示时,会调用OnRestart()方法 */@Overrideprotected void onStop() {    super.onStop();    System.out.println("Main2Activity-onStop");}/** * 当前Activity被销毁时调用,表示结束生命周期 */@Overrideprotected 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 */@Overridepublic int describeContents() {    return 0;}/** * 打包,把数据写入包裹对象 * @param dest * @param flags */@Overridepublic 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) {      = 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 + '}'; }  }

转载于:https://juejin.im/post/5b94f0a86fb9a05d2567bb74

你可能感兴趣的文章
SQLServer2012自增列值跳跃的问题
查看>>
ViewBag对象的更改
查看>>
Mysql 监视工具
查看>>
hdu1025 Constructing Roads In JGShining's Kingdom(二分+dp)
查看>>
Android PullToRefreshListView和ViewPager的结合使用
查看>>
禅修笔记——硅谷最受欢迎的情商课
查看>>
struts2入门(搭建环境、配置、示例)
查看>>
Caused by: org.apache.ibatis.reflection.ReflectionException我碰到的情况,原因不唯一
查看>>
linux top命令查看内存及多核CPU的使用讲述【转】
查看>>
Linux下golang开发环境搭建
查看>>
jQuery操作input
查看>>
layer弹出信息框API
查看>>
delete from inner join
查看>>
WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
查看>>
git merge 和 git merge --no-ff
查看>>
独立软件开发商进军SaaS注意八个问题,互联网营销
查看>>
jdk内存的分配
查看>>
关于self.用法的一些总结
查看>>
UIView翻译 (参考)
查看>>
Android Display buffer_handle_t的定义
查看>>