Android observer未更新listview中的对象

Android observer未更新listview中的对象,android,observer-pattern,Android,Observer Pattern,我在android应用程序中使用java.util.Observable时遇到问题。 在我的应用程序中,我想在后台更改数据时更新列表视图 因此,来自列表视图的对象位于观察者中。我在observer类的arraylist中看到了它们。在Eclipse调试中,我看到了对我的对象的引用,例如:at.stockserv.todo。Todo@1a3f2cb7 有一件事我不明白:当我的观察者更新方法中的数据发生变化时 @Override public void update(Observable obser

我在android应用程序中使用
java.util.Observable
时遇到问题。 在我的应用程序中,我想在后台更改数据时更新
列表视图

因此,来自
列表视图的对象位于观察者中。我在observer类的
arraylist
中看到了它们。在Eclipse调试中,我看到了对我的对象的引用,例如:
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);

            }
        }
    }   

}
在setId之后,对象突然有了另一个引用。因此,在我的
列表视图中
,旧数据仍然与旧引用一起存储

视图中的我的代码:

@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();              
        }           
    }

}
actNotices
列出
arraylist
以及
适配器中的数据。这里的数据没有更改,但是数据应该从第一个方法更改

我的观察员代码是:

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));         
 }    
公共类DBObjectUpdateObserver扩展了Observable{
私有静态DBObjectUpdateObserver实例=新的DBObjectUpdateObserver();
公共静态DBObjectUpdateObserver getInstance(){
返回实例;
}
私有DBObjectUpdateObserver(){
}
public void updateId(dbObject、int-oldId、int-newId){
HashMap数据=新的HashMap();
data.put(“oldId”,oldId);
data.put(“newId”,newId);
data.put(“dbObject”,dbObject);
getInstance().setChanged();
getInstance().notifyObservers(新的observer消息(Actions.messageIdChanged,data));
}
public void数据已更改(dbObject、int-oldId、int-newId){
HashMap数据=新的HashMap();
data.put(“dbObject”,dbObject);
data.put(“oldId”,oldId);
data.put(“newId”,newId);
getInstance().setChanged();
getInstance().notifyObservers(新的observer消息(Actions.messageDBDataChanged,data));
}    
}

我不明白的是:
arraylist
中的对象将添加到观察者。观察者对象中的某些数据已更改。但是这些变化只发生在观察者的对象中,而不是我添加到观察者的arraylist中。我认为在观测者中,
arraylist
中只有对我的对象的引用?因此,当观察者中的对象发生变化时,
arraylist
中的对象也应该发生变化。但这不起作用,为什么


有人能解释一下这里发生了什么吗?

一旦您的数据发生变化,请调用下面的方法

CustomAdapter=新的CustomAdapter(YourActivity.this,dataSet); adapter.notifyDataSetChanged()


在这里,您可以通知列表适配器数据集已更改。

我现在使用LocalBroadcasts完成了整个更新过程,现在我的问题解决了

您是否使用observer模式更新列表中的数据?是的,我使用的是observer模式。为此,您可以更新列表数据并使用notifydatasetchange方法,该方法将与observer完全相同。问题是,我的适配器中的数据没有更改,它仍然是相同的,因此,如果数据集更改不起作用,则不会显示可观察对象。你确定在NotifyObservators()之前调用setChanged()吗?我想这应该可以,但我自己还没有测试过,它可以工作。如果不回答这个问题,问题就解决了