这是我的ActivityA:
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中永远不会被调用。也许我忘了什么?在不使用活动结果代码的情况下,当从其他活动更新对象时,是否有更好的通知方式?
答案 0 :(得分:1)
首先需要注册您的观察者,在_mouse.addObserver(this);
_mouse = new Mouse();
来调用更新
您使用Mouse
为parcelable
模型Parcels wrap and unwrap
做了第二件事。甚至你已经使用了serializable
它没有用。
因为您已在Obervable
扩展Mouse
类注册了您的监听器,该类具有无法分发或可序列化的服务器列表。
因此,只要您将模型传递给ActivityB
,就会删除ActivityA
的旧听众。
要查看我的回答,请执行我已指明的第一步,并从_mouse.NotifyObservers();
本身拨打ActivityA
。
您将在update
上收到回电。