Intent四种数据传递方式

MainActivity中传值操作

public 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 + '}'; } }

相关文章