intent(意图) :跳转传值 详细步骤
Intent 传值
传递一个数据的时候用putExtra();
传递一组数据的时候用putExtras();
可以传递基本数据类型
也可以传递应用数据类型
传递基本数据类型可以直接传值
传递引用数据类型(或者自定义数据类型)必须序列化
Java 里面是serializable--------android里面是Parcelable
传递基本数据类型
Intent intent=new Intent();
intent.setClass(this, OtherActivity.class);
//传值一 直接通过意图来传递
intent.putExtra("name", name);
intent.putExtra("age", age);
// //传值二 创建一个bundle(打包--将属性打包在一起然后直接传包)类对象
Bundle bundle=new Bundle();
bundle.putString("name", name);//写String是因为String实现le 序列化接口Serializable
bundle.putInt("age", age);
intent.putExtras(bundle);
startActivity(intent);
在第二个界面获取的时候
public class OtherActivity extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other_activity);
//直接通过意图来取值
Intent intent=getIntent();//获得上个页面的意图
String name=intent.getStringExtra("name");
int age=intent.getIntExtra("age", 0);//0是默认值 可以随意写
showLongToast(name+" "+age);
}
// @Override
// public boolean onTouchEvent(MotionEvent event) {
// // TODO Auto-generated method stub
// if(event.getAction()==MotionEvent.ACTION_DOWN){
// //拿到包在取值
// Intent intent1=getIntent();
// Bundle bundle=intent1.getExtras();
// String name1=bundle.getString("name");
// int age1=bundle.getInt("age");
// showLongToast(name1+":"+age1);
// }
// return super.onTouchEvent(event);
// }
}
android里面是Parcelable
通过实现Parcelable接口序列化对象的步骤:
1、声明实现接口Parcelable
2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel 对象
3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:
Java代码 public static final Parcelable.Creator<T> CREATOR
其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必 须全部大写。
4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序 列化为你的对象
具体代码如下:
public class ently implements Parcelable{
public String name;
public Date date;
public Bitmap bitmap;
public ently() {}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
//序列化对象
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeSerializable(date);
dest.writeParcelable(bitmap, flags);
}
//反序列化
public static final Parcelable.Creator<ently> CREATOR=new Parcelable.Creator<ently>() {
@Override
public ently[] newArray(int size) {
return new ently[size] ;
}
@Override
public ently createFromParcel(Parcel source) {
ently entlys=new ently();//创建一个实例对象
entlys.name=source.readString();//将读到的
entlys.date=(Date) source.readSerializable();
entlys.bitmap=source.readParcelable(null);
return entlys;
}
};
}
传递数据的activity
public class MainActivity extends Activity {
public ently entlys;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
entlys=new ently();
entlys.name="sdffsd";
entlys.date=new Date();
entlys.bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Intent intent=new Intent();
intent.putExtra("ently", entlys);
intent.setClass(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
return super.onTouchEvent(event);
}
}
获取的activity
public class OtherActivity extends Activity {
public TextView view;
public ImageView view2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
ently entlys=getIntent().getParcelableExtra("ently");
view=(TextView) findViewById(R.id.textView2);
String str=entlys.name+entlys.date;
view.setText(str);
view2=(ImageView) findViewById(R.id.imageView1);
view2.setImageBitmap(entlys.bitmap);
}
}