嘿伙计我是Android编程的新手但是对.net有一些经验无论如何我想做的是创建一个类RestartDialog
然后从一个活动中调用这个类。通常在.net中我会使用:
RestartDialog rd = new RestartDialog();
rd.setType(EXTENDED_TYPE);
rd.show;
然后它将以扩展模式启动,但是在Android中你需要Intents来启动活动,这是我唯一的方法吗?我知道我可以使用Intent.putExtra
等,但我需要先设置多个值。
请问最好的选择是什么?在此先感谢您的帮助。
答案 0 :(得分:1)
Intent是发送数据的方式。因此,如果您必须发送许多数据,可以使用Parcelable
。它的速度也快......
如果您只是传递物体,那么Parcelable
就是为此设计的。它需要比使用Java的本机序列化更多的努力,但它的速度更快(我的意思是,方式更快)。
从文档中,一个关于如何实现的简单示例是:
// simple class that just has one member property as an example
public class MyParcelable implements Parcelable {
private int mData;
/* everything below here is for implementing Parcelable */
// 99.9% of the time you can just ignore this
public int describeContents() {
return 0;
}
// write your object's data to the passed-in Parcel
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
// example constructor that takes a Parcel and gives you an object populated with it's values
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
Observe that in the case you have more than one field to retrieve from a given Parcel, you must do this in the same order you put them in (that is, in a FIFO approach).
Once you have your objects implement Parcelable it's just a matter of putting them into your Intents with putExtra():
Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);
Then you can pull them back out with getParcelableExtra():
Intent i = getIntent();
MyParcelable myParcelableObject = (MyParcelable) i.getParcelableExtra("name_of_extra");
您也可以使用GSON发送数据..
答案 1 :(得分:1)
首先,您需要创建Intent
:
Intent intent = new Intent();
将意图视为存储数据值的一种方式:
intent.putExtra("type", EXTENDED_TYPE);
当您完成意图中的信息后,即可开始活动:
startActivity(intent);
然后,在您的新活动中,您将在onCreate方法中提取所需的值:
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.email_login_activity);
Intent intent = getIntent();
this.type = intent.getIntExtra("type", 0);
在这种情况下,如果未设置额外的“类型”,我已将getIntExtra返回0
。
如果您有任何其他问题,请告诉我。
答案 2 :(得分:0)
虽然最简单的解决方案是:
使用带有getter setter的静态数据成员创建一个类。
从一个活动设置并从另一个活动获取该对象。
活动A. mytestclass.staticfunctionSet( “”, “”, “” ..等);
活动b mytestclass obj = mytestclass.staticfunctionGet();