简单的数据传递
简单数据概要
intent.putExtra(key , value);
----------------------------
Intent intent = getIntent();
intent.getXXXExtra(key); // xxx ---- 指的是早前传递的数据类型
需求举例:把MainActivity中的数据,传递到ResultActivity中
先提醒一下:因为页面的代码较多,并且简单,就不再罗列出来了。
public class MainActivity extends Activity {
private TextView tvResult;
private EditText etName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvResult = (TextView) findViewById(R.id.tv_result);
etName = (EditText) findViewById(R.id.et_name);
}
//页面点击触发该事件,让他跳转到指定的ResultActivity 中
public void calc(View v){
String name = etName.getText().toString().trim();
String str = "我是简单的数据";
Intent intent = new Intent(this , ResultActivity.class);
//我们把数据存放在Intent中,
//让intent带数据过去这里的关键方法就是putExtra
//该方法有一点类似: Map 键值对
//例如:aa是键,str是值。
intent.putExtra("aa", str);
intent.putExtra("number", 13);
intent.putExtra("flag", false);
startActivity(intent);
}
}
public class ResultActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
// 这个intent对象不再是new出来的,而是使用getIntent()方法获取,
//意思是:是那个intent打开了我,我就获取谁。
Intent intent = getIntent();
//getXXXExtra("键名"),是根据前面一个Intent定义好的键,获取到相应的值
//XXX表示数据类型
String value = intent.getStringExtra("aa");
int number = intent.getIntExtra("number1", 0);
boolean flag = intent.getBooleanExtra("flag1" , true);
//--------------------------------------------------------------
//显示数据
Toast.makeText(this, "number=="+number+"---flag="+flag, 0).show();
TextView tvResult = (TextView)findViewById(R.id.tv_result);
tvResult.setText(value);
}
}
AndroidManifest.xml
<activity
//theme是主题,这里的主题的意思就是说:在我的手机也面上,不要有头部条
android:theme="@android:style/Theme.Light.NoTitleBar"
//登记注册,我们自己写activity
android:name="com.itheima.rp.ResultActivity">
</activity>
复杂的数据
复杂的数据的传递一般就是一个javaBean传递,
这个javaBean的传递是有要求的:
这个javaBean必须实现一个Serializable或者Parcelable
(Parcelable是谷歌对Serializable的针对自己的优化)
需求举例:在一个activity中封装好javabean的数据传递到下一个activity
StudentBean
public class Student implements Serializable/*Parcelable*/{
public String name ;
public int age ;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
/*
//如果实现的是Parcelable,必须要写下面的代码,
public int describeContents() {
return 0;
}
//把数据写到包里面 -- 读写顺序要一致
public void writeToParcel(Parcel out, int flags) {
out.writeString(name);
out.writeInt(age);
}
public static final Parcelable.Creator<Student> CREATOR
= new Parcelable.Creator<Student>() {
//从parcel转化数据,形成一个student对象
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
private Student(Parcel in) {
name = in.readString();
age = in.readInt();
}
*/
}
MainActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
//跳转过去,传递一个对象 javaBean
ArrayList<Student> stus = new ArrayList<Student>();
Student stu1 = new Student("zhangsan", 18);
Student stu2 = new Student("zhangsan1", 118);
Student stu3 = new Student("zhangsan2", 128);
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
//传递上下文, 传递跳转哪一个类
Intent intent = new Intent(this ,OtherActivity.class);
//intent.putExtra("stu1",stu1);只是传递单个javabean
//这里一样可以传递集合,看源码知道,ArrayList也实现了
intent.putExtra("stus", stus);
//如果javaBean实现的是Parcelable,那么按照下面来传递一个集合
//intent.putParcelableArrayListExtra("stus", stus);
startActivity(intent);
}
}
OtherActivity
public class OtherActivity extends Activity {
private static final String TAG = "OtherActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
Intent intent = getIntent();
//单个javabena的接受,并且这个javaBean是实现了Serializable的
// Student stu = (Student) intent.getSerializableExtra("stu");
//这个javaBean实现Parcelable的,采用如下的方法
// ArrayList<Student> stus = intent.getParcelableArrayListExtra("stus");
//接受集合的javaBean,并且实现Serializable
ArrayList<Student> stus = (ArrayList<Student>) intent.getSerializableExtra("stus");
for (Student stu : stus) {
Log.d(TAG, "STU=="+stu.toString());
}
}
}
AndroidManifest.xml
<activity android:name="com.itheima.data.OtherActivity"></activity>