我在Activity1中有一個ObservableInt
,並且想通過intent將它傳遞給Activity2。但不管我怎麼通過它,綁定到ObservableInt
的OnPropertyChangedCallback
都會丟失。如何防止丟失?如何在活動之間傳遞ObservableInt?
// Activity1
private ObservableInt var = new ObservableInt(0);
var.addOnPropertyChangedCallback(callback1);
public void goToActivity2(View view) {
var.set(1); // fires callback1
Intent intent = new Intent(getContext(), Activity2.class);
// first way to pass ObservableInt
intent.putExtra("VAR", (Parcelable) var);
// second way to pass ObservableInt
Bundle bundle = new Bundle();
bundle.putParcelable("VAR", var);
intent.putExtras(bundle);
startActivity(intent);
}
// Activity2
protected void onCreate(Bundle savedInstanceState) {
ObservableInt a = getIntent().getParcelableExtra("VAR");
Bundle bundle = getIntent().getExtras();
ObservableInt b = bundle.getParcelable("VAR");
a.set(2); // cannot fire callback1
b.set(3); // cannot fire callback1
}
//Activity1
private ObservableInt var = new Observable(0);
protected void onCreate(Bundle savedInstanceState) {
var.addOnPropertyChangedCallback(callback1);
var.set(1); // fires callback1
Fragment1 frag = Fragment1.newInstance(var); // instantiates Fragment1
// inflate some layout with frag
}
public void goToActivity2 (View view) {
Intent intent = new Intent(this, goToActivity2.class);
intent.putExtra("VAR", var);
startActivity(intent);
}
// Fragment1
public static Fragment1 newInstance(ObservableInt var) {
Bundle args = new Bundle();
args.putSerializable("VAR", var);
Fragment1 fragment = new Fragment1();
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ObservableInt var = (ObservableInt) getArguments().getSerializable("VAR");
var.addOnPropertyChangedCallback(callback2);
var.set(2); // fires callback1 and callback2
}
//Activity2
protected void onCreate(Bundle savedInstanceState) {
ObservableInt var= (ObservableInt) getIntent().getSerializableExtra("VAR");
var.addOnPropertyChangedCallback(callback3);
var.set(3); // only fires callback3 :(
}
這樣一個壞主意。你爲什麼不使用活動巴士? –
謝謝。我是新來的事件公交車。我會看看它。 – Moon
@ProkashSarkar事件公交範例(有點爭議)被視爲過時。其中最受歡迎的事件公共汽車之一Otto已被其創建者放棄以支持Reactive Streams。 –