欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Intent四种数据传递方式

程序员文章站 2022-06-01 12:47:53
...

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

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