【发布时间】:2012-09-03 15:10:52
【问题描述】:
我有一个ListActivity 和一个短信ContentObserver。 ListView 显示
发送/接收短信。
每当 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);
}
}
【问题讨论】:
-
我告诉你,你不能从观察者内部触摸列表视图。请同时发送观察者调用的函数(
updateList())
标签: android view sms listactivity contentobserver