【发布时间】:2011-02-16 06:54:49
【问题描述】:
我正在尝试从 XML 解析非 UI 线程的 ListView 中显示的 SimpleCursorAdapter 上调用 .notifyDataSetChange() ,但我终生无法弄清楚如何操作。我已经搜索了所有内容,发现的所有文章都是关于从 ListView 本身内部刷新的文章,而我没有这样做。我想不出一种方法来传递适配器或从父级获取它,或者我需要做什么才能从另一个线程调用它的方法。
ListView 将在我下次启动 Activity 时正常更新,但我希望它在 XML 解析完成后立即刷新,以便用户立即看到新数据。
答案可能很简单;它只是在逃避我。提前感谢您的帮助!
这是我的代码:
public class DirectoryListActivity extends DirectoryActivity {
public final Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.directory_list);
// Populate the ListView
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(
directoryPeople.PEOPLE_TABLE
);
String asColumnsToReturn[] = {
//snip
};
mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null,
null, null, directoryPeople.DEFAULT_SORT_ORDER);
startManagingCursor(mCursor);
// HERE'S THE ADAPTER
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.directory_people_item, mCursor,
new String[]{
//snip
new int[]{
//snip
);
ListView av = (ListView)findViewById(R.id.listPeople);
av.setAdapter(adapter);
//Perform sync in background
startXMLParseThread();
}
public void startXMLParseThread() {
new Thread () {
boolean success = false;
public void run() {
try {
// XML-Parsing and Table-Updating code
} catch (Exception e) {
success = false;
}
mHandler.post(new Runnable() {
public void run() {
TextView txtUpdateStatus = (TextView)findViewById(R.id.txtUpdateStatus);
if (success) {
txtUpdateStatus.setText(R.string.synced);
} else {
txtUpdateStatus.setText(R.string.sync_failed);
}
adapter.notifyDataSetChanged(); // ECLIPSE HATES
}
});
}
}.start();
}
}
}
【问题讨论】:
标签: android