這是我ActivityA:可觀察java對象犯規更新
public class ActivityA extends AppCompatActivity implement Observer
{
private Mouse _mouse;
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
_mouse = new Mouse();
_mouse.posX = 30;
_mouse.addObserver(this);
}
@Override
public void onClick(View v)
{
Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putExtra("Mouse", Parcels.wrap(mouse));
startActivity(intent)
}
@Override
public void update(Observable o, Object arg)
{
// Never get called.
Log.e("TAG", "We're updating the object");
}
}
這是我ActivityB:
public class ActivityB extends AppCompatActivity
{
private Mouse _mouse;
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
_mouse = Parcels.unwrap(getIntent().getParcelableExtra("Mouse"));
Log.v("AB", "X: "_mouse.posX); // This is 30
}
@Override
public void onClick(View v)
{
_mouse.posX = 100;
_mouse.NotifyObservers();
}
}
最後我的模型是這樣的:
public class Mouse extends Observable
{
public int posX;
public void NotifyObservers()
{
setChanged();
notifyObservers();
}
}
我可以」不要讓它工作,因爲ActivityA中的「更新」從不會被調用。也許我忘了一些東西?在沒有使用活動結果代碼的情況下從其他活動更新對象時,是否有更好的通知方式?
您未能正確地命名您的方法。 'NotifyObservers()'必須以小寫字母開頭(因爲每個方法名都應該在Java中)。那麼你也必須修改方法內部的調用到'super.notifyObservers();否則你創建一個無限循環,你可能需要一個更大的主機來成功執行......; o) –
該方法很好,是沒有被淹沒。 –