私はActivity1にObservableInt
を持っており、それを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イベントバスのパラダイムは、(いくぶん議論の余地がある)廃止されたと考えられています。最も人気のあるイベントバスの1つであるOttoは、クリエイターによってReactive Streamsに賛成して放棄されました。 –