Intent 的用法你已经比较熟悉了,我们可以借助它来启动活动,发送广播,启动服务等。在进行上诉操作的时候,我们还可以在Intent中添加一些附加数据,以达到传值的效果,比如在MainActivity中传值:
package com.example.parcelableapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText edt;
private Button btn ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt = findViewById(R.id.edt);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = edt.getText().toString();
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("send_data",data);
startActivity(intent);
}
});
}
}然后再在SecondActivity中取出来:
package com.example.parcelableapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txt = findViewById(R.id.txt);
String data = getIntent().getStringExtra("send_data");
txt.setText(data);
}
}但是不知道你有没有发现,putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都会支持。但是当你想去传递一些自定义对象的时候,就会发现无从下手。我们就学习一下使用Intent来传递对象的技巧。
Serializable方式
使用Intent来传递对象通常有两种实现方式: Serializable和Parcelable。
Serializable是序列化的意思,表示将一个对象转换成可存储可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable这个接口就可以了。
比如说有一个Person类,其中包含了name 和 age这两个字段,想要将它序列化就可以这样写:
Person类:
package com.example.parcelableapplication;
import java.io.Serializable;
public class Person implements Serializable {
private String name ;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}MainActivity的设置:
package com.example.parcelableapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText edt,edt_age;
private Button btn ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt = findViewById(R.id.edt);
edt_age = findViewById(R.id.edt_age);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = edt.getText().toString();
int age = Integer.parseInt(edt_age.getText().toString());
Person person = new Person();
person.setName(name);
person.setAge(age);
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("person_data",person);
startActivity(intent);
}
});
}
}然后传值给SecondActivity,然后再取值出来:
package com.example.parcelableapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txt = findViewById(R.id.txt);
Person person = (Person)getIntent().getSerializableExtra("person_data");
int age = person.getAge();
String name = person.getName();
if(age >= 18){
txt.setText("嗨,"+name+"你貌似有点老哦,"+age+"岁的臭老娘们了。");
}else{
txt.setText("嗨"+name+",你来得刚刚好!"+age+"的美丽少女");
}
}
}
随时随地看视频