如何使用自定义值启动活动

时间:2013-08-06 03:55:16

标签: android .net android-activity

嘿伙计我是Android编程的新手但是对.net有一些经验无论如何我想做的是创建一个类RestartDialog然后从一个活动中调用这个类。通常在.net中我会使用:

RestartDialog rd = new RestartDialog();

rd.setType(EXTENDED_TYPE);
rd.show;

然后它将以扩展模式启动,但是在Android中你需要Intents来启动活动,这是我唯一的方法吗?我知道我可以使用Intent.putExtra等,但我需要先设置多个值。

请问最好的选择是什么?在此先感谢您的帮助。

3 个答案:

答案 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();