概述
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 + '}'; }
}
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 + '}'; }
}
最后
以上就是英俊西牛为你收集整理的Intent四种数据传递方式Intent四种数据传递方式的全部内容,希望文章能够帮你解决Intent四种数据传递方式Intent四种数据传递方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复