我有ListActivity
一条短信ContentObserver
。显示ListView
SMS 发送/接收。每当 SMS 数据库(发送/接收)发生变化时,观察者就会调用其中的一个函数Activity
来更新ListView
.
这在 FROYO 中工作正常。但在 ICS 我得到以下
android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。
请让我知道可能是什么问题。
以下是顶层代码。
public class MyList extends ListActivity implements OnInitListener{
@Override
protected void onDestroy() {
super.onDestroy();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
protected void onPause() {
super.onPause();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MyList );
registerSmsEventObserver();
updateList();
}
@Override
protected void onResume() {
super.onResume();
registerSmsEventObserver();
}
updateList() {
//fill up the listview
}
private void registerSmsEventObserver() {
if (smsObserver != null)
return;
smsObserver = new ContentObserver(null) {
public void onChange(boolean selfChange) {
updateList();
}
};
MyList.this.getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true, smsObserver);
}
}