这是我的 Activity A:
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 中的“更新”从未被调用。也许我忘记了什么?当从其他 Activity 更新对象时,是否有更好的方法来通知而不使用 Activity 结果代码?
最佳答案
首先,您需要注册观察者以通过在
_mouse = new Mouse();
之后执行_mouse.addObserver(this);
来调用更新第二件事,您使用
包裹包裹和展开
为鼠标
模型可包裹
。即使您使用了serialized
,它也不起作用。
因为您已在由 Mouse
类扩展的 Obervable
中注册了监听器,该类具有不可分割或可序列化的观察者列表。
因此,每当您将模型传递给 ActivityB
时,ActivityA
的旧监听器都会被删除。
要检查我的答案,请执行我已指示的第一步,并从 ActivityA
本身调用 _mouse.NotifyObservers();
。
您将在更新
时收到回调。
关于java - 可观察的java对象不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40627703/