如何在活动之间传递类变量?

时间:2016-02-07 10:47:53

标签: android variables android-activity

我创建了一个Telnet类,并在Mainactivity上对其进行了实际操作。现在我想在项目的所有其他活动中访问MainActivity中的onnetized telnet。 我正在做的是创建一个get函数:

public Telnet getMyTelnet() {
    return telnet;
}

然后在任何我想要的地方打电话。 当我把它称为片段时,我这样做:

MainActivity activity = (MainActivity) getActivity();
            telnet = activity.getMyTelnet();

问题是当我在另一个活动中需要它时。我该怎么做? 我试过这个,但没有运气。

MainActivity a = new MainActivity ();
            telnet = a.getTelnet();

2 个答案:

答案 0 :(得分:1)

在android中有两种方法可以在Activities之间实现发送和接收对象: 他们必须:

  • Serializable(Implment object as Serializable)
  • Parcelable(将对象实现为Parcelable)

您需要实施Parcelabel  并将以下方法添加到类

包含参数的构造函数

 @Override
    public void writeToParcel(Parcel dest, int flags) {

        // write each field into the parcel. When we read from parcel, they
        // will come back in the same order
        dest.writeString(strVar); // to write your string variables
        dest.writeInt(intVar); // to write your int variables
    }

覆盖writeToParcel方法

private void readFromParcel(Parcel in) {

    strVar= in.readString();
    intVar= in.readInt();
}

从包裹中读取

的方法
public static final Parcelable.Creator CREATOR =
    new Parcelable.Creator() {
        public Telnet createFromParcel(Parcel in) {
            return new Telnet(in);
        }

        public Telnet[] newArray(int size) {
            return new Telnet[size];
        }
    };

@Override
    public int describeContents() {
        return 0;
    }

包裹创建者

Telnet obj = new Telnet();

// Set values etc.

Intent i = new Intent(this, MyActivity.class);
i.putExtra("your.package.Telnet", obj);

startActivity(i);

然后您的Telnet课程已准备好转移到其他活动。

现在使用它: 在主要行为中:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle b = getIntent().getExtras();
        Telnet obj =
            b.getParcelable("your.package.Telnet");
    }

并在第二个活动中执行:

{{1}}

答案 1 :(得分:1)

在MyActivity类中创建Telnet实例为static。并且正确的方法

punlic static Telnet telnet;

onCreate() {
 //initialise telnet
}

onResume() {
//initialise telnet if null;
}

onStop() {
//make telnet null
}
public static Telnet getTelnet() {
return telnet;

让我知道它是否有效