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



我创建了一个类Telnet,并在Mainactivity上对其进行了初始化。现在,我想在项目的所有其他活动中访问我在主活动中激活的telnet。我正在做的是创建一个 get 函数:

public Telnet getMyTelnet() {
    return telnet;
}

然后随心所欲地称呼它。当我在片段中调用它时,我是这样做的:

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

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

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

在 android 中,有两种方法可以实现发送和接收对象 bebtween 活动:他们必须:

  • 可序列化(Implment 对象为可序列化对象)
  • 可分包
  • (将对象实现为可分包)

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

以宗地作为参数的构造函数

public Telnet(Parcel in) {
    readFromParcel(in);
}

重写写入到包裹方法

 @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
    }

一种从包裹中读取的方法

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 类已准备好转移到另一个活动。

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

Telnet obj = new Telnet();
// Set values etc.
Intent i = new Intent(this, MyActivity.class);
i.putExtra("your.package.Telnet", obj);
startActivity(i);

在第二个活动中,执行以下操作:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle b = getIntent().getExtras();
        Telnet obj =
            b.getParcelable("your.package.Telnet");
    }

MyActivity 类中创建 Telnet 实例作为静态。

punlic static Telnet telnet;
onCreate() {
 //initialise telnet
}
onResume() {
//initialise telnet if null;
}
onStop() {
//make telnet null
}
public static Telnet getTelnet() {
return telnet;

让我知道它是否有效

最新更新