由于更新TextView应该是一项简单的任务,因此我必须在这个问题上遗漏一些完全愚蠢的东西。我有一个Activity类,它是另一个接收消息的观察者。在我的Activity's onCreate中,我执行以下操作并且工作正常。
theStatus = (TextView) findViewById(R.id.theStatus);
theStatus.setText("waiting");
稍后当消息活动收到新消息时,将其交给观察者(我的活动)
public void statusUpdate( GenericMessage aMessage )
{
String statusText = aMessage.getDetails();
theStatus.setText(statusText);
theSessionStatus.invalidate(); // I've tried with and without this call
}
然而,屏幕不会更新。我必须忽略一些事情......
答案 0 :(得分:0)
看起来我找到了一个解决方案,虽然它感觉像是一个黑客。我从上面的评论和here中得到了这个想法。
我现在正在使用Handler通知活动B一条消息已经进入它感兴趣的内容.B在其onCreate中创建一个Handler:
Handler statusHandler = new Handler();
statusHandler.post(new Runnable()
{
public void run()
{
statusUpdate();
}
});
我更新了消息接收器类C(B试图成为Observer),当B向其注册时接收句柄。然后在C中,当适用的消息进入时,我调用以下内容:
theMsgObserverHandle.post(new Runnable()
{
public void run()
{
Log.d(myName, "Calling my Observer statusUpdate");
theMsgObserver.statusUpdate();
}
});
我不喜欢的是现在我不能直接将消息传递给B. (我的消息类是我自己定义的类而不是android.os.Message)现在在B中,我需要询问消息的C实例(C是Singleton)。但至少我正在前进。如果有人有更好的实施,我真的很感激反馈。