java - 可观察的java对象不更新

标签 java android observable

这是我的 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/

相关文章:

java - Edittext 文本输入监听器

Angular 5 - 响应 HttpInterceptor - 超时重试(504)

javascript - 当从 RxJS 订阅回调更改时,复选框选中的属性不会更新元素

Java-Selenium2 : Need method explanation

java - REST API 设计 - 获取多条(1000)条记录

java - Mallet Java 中的错误

android - 使用 X509TrustManagerExtensions checkServerTrusted 固定公钥

android - 如何为android创建均衡器

java - Hibernate 无效的列名

javascript - RXJS 为什么只有最后一个数字既有a又有b?