Pet*_*ter 5 android observer-pattern
我java.util.Observable在我的Android应用程序中使用时遇到了麻烦.在我的应用程序中,我想更新listview数据在后台更改的时间.
所以来自的对象listview都在观察者中.我arraylist从观察者班看到他们.在Eclipse Debugging中,我看到了对象的引用,例如:at.stockserv.todo.Todo@1a3f2cb7
有一点我不明白:在我的观察者更新方法中更改数据时
@Override
public void update(Observable observable, Object data) {
if (observable instanceof DBObjectUpdateObserver) {
ObserverMessage message = (ObserverMessage) data;
if (message.getAction() == Actions.messageIdChanged) {
if (message.getData().get("oldId").equals(Integer.valueOf(getId()))) {
setId((Integer) message.getData().get("newId"));
DBObjectUpdateObserver.getInstance().dataHasChanged(this);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在setId之后,对象突然有另一个引用.所以在我看来listview,旧的数据仍然存储在旧的引用中.
我在视图中的代码:
@Override
public void update(Observable observable, Object data) {
ObserverMessage message = (ObserverMessage) data;
if (message.getAction() == Actions.messageDBDataChanged) {
if (actNotices.contains(message.getData().get("dbObject"))) {
notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "Data is updated ", Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
actNoticesist arraylistwith the data in adapter.此处的数据未更改,但应从第一种方法更改数据.
我的观察者代码是:
public class DBObjectUpdateObserver extends Observable {
private static DBObjectUpdateObserver instance = new DBObjectUpdateObserver();
public static DBObjectUpdateObserver getInstance() {
return instance;
}
private DBObjectUpdateObserver() {
}
public void updateId (DBCommunicator dbObject, int oldId, int newId) {
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("oldId", oldId);
data.put("newId", newId);
data.put("dbObject", dbObject);
getInstance().setChanged();
getInstance().notifyObservers(new ObserverMessage(Actions.messageIdChanged, data));
}
public void dataHasChanged(DBCommunicator dbObject, int oldId, int newId) {
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("dbObject", dbObject);
data.put("oldId", oldId);
data.put("newId", newId);
getInstance().setChanged();
getInstance().notifyObservers(new ObserverMessage(Actions.messageDBDataChanged, data));
}
Run Code Online (Sandbox Code Playgroud)
}
我不明白的是:将对象arraylist添加到观察者中.观察者对象中的某些数据已更改.但是变化只是在观察者的对象中,而不是在我添加到观察者的arraylist中.我以为在观察者中只有一个参考我的对象arraylist?因此,arraylist当观察者中的对象发生变化时,该对象也应该发生变化.但这不起作用,为什么?
谁能解释一下这里发生了什么?
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |