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<Dog> CREATOR = new Parcelable.Creator<Dog>(){
//从包裹里把数据取出来
@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];
}
};
<h2><pre name="code" class="java"> <span style="font-size:18px;">/**
* 内容的描述标记(通常使用默认实现)
* @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);
}</span>
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 + ‘}‘; } }
时间: 2024-10-22 14:59:31