Android初级开发第十讲--对象传递
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处!
All Rights Reserved !
大家在listview传递对象或者activity之间对象的传递,如果处理不当,会出现Exception
我们可以用如下方法解决
方法一:
如果单纯的传递List<String> 或者List<Integer>的话 就可以直接使用
intent.putStringArrayListExtra(name, value)
intent.putIntegerArrayListExtra(name, value)
方法二:
如果传递的是List<Object>,可以把list强转成Serializable类型,同时传递Object也要实现Serializable接口 求,然后通过 putExtras(key, (Serializable)list)
方法传递过去,接收的时候用 (List<Object>) getIntent().getSerializable(key) 收到List<YourObject>数据了
方法三:
一种是实现Serializable接口,很简单
Bundle.putSerializable(Key,Object);
另一种是 实现Parcelable接口
Bundle.putParcelable(Key, Object);
代码如下:
public class Bean implements Parcelable {
private int id;
private String username;
private String password;
public static final Parcelable.Creator<Bean> CREATOR = new Creator<Bean>() {
@Override
public Bean createFromParcel(Parcel source) {
Bean bean = new Bean();
bean.id = source.readInt();
bean.username = source.readString();
bean.password = source.readString();
return bean;
}
@Override
public Bean[] newArray(int size) {
return new Bean[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt(id);
dest.writeString(username);
dest.writeString(password);
}
}
序列化:
public class Student implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public int age;
public String name;
}发送: Student stu = new Student();
stu.name = tmall_name.getText().toString();
stu.age = Integer.valueOf(tmall_age.getText().toString());
Intent intent = new Intent();
intent.setClass(getApplicationContext(), StudentInfo.class);
intent.putExtra("student", stu);
startActivity(intent);接收:
Intent intent = this.getIntent();
Student stu = (Student) intent.getSerializableExtra("student");
student_name.setText(stu.name);
student_age.setText(stu.age+"");方法五:
用intent传来传去 觉得不方便 我们可以写一个在application里面的全局数据1、创建一个属于你自己的android.app.Application的子类
2、在manifest中申明一下这个类,
3、这时android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
继承Application
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
关于AndroidManifest.xml中的配置,原来直接给application加个name就可以了,如下面所示:
<application android:name=".MyApp"
android:icon="@drawable/icon" android:label="@string/app_name">
使用class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
谢谢大家!
浙公网安备 33010602011771号