【发布时间】:2013-09-05 22:02:53
【问题描述】:
有没有办法通过 CursorLoader 使用 SimpleCursorAdapter 以便我可以让 TextView 与我的数据库更改保持同步?我有一个我想维持的帐户余额,而不必自己管理每一项更改。我的 TextView 不在任何有适配器的地方。它更像是一面旗帜。下面代码的问题是 setViewValue 从未被调用,我假设适配器尚未设置为任何内容。任何帮助或建议将不胜感激。谢谢。
mAdapter = new SimpleCursorAdapter(this,
R.layout.todays_bal_header,
null,
new String[] { TransactionTable.TRANS_AMOUNT, TransactionTable.TRANS_ID },
new int[] { R.id.todays_balance },
0 );
mAdapter.setViewBinder(new ViewBinder() {
public boolean setViewValue(View aView, Cursor c, int aColumnIndex) {
if (aView.getId() == R.id.todays_balance) {
//Calculate value
TextView textView = (TextView) aView;
textView.setText(Integer.toString(value));
return true;
}
return false;
}
});
getSupportLoaderManager().initLoader(URL_LOADER, null, this);
这是我的回调
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
mAdapter.changeCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.changeCursor(null);
}
【问题讨论】:
-
使用 ContentResolver.registerContentObserver(Uri, boolean, ContentObserver) 和 notifyChange(Uri, ContentObserve)
-
我认为这是一个很好的选择。如果您想将其添加为评论,我可以接受。我选择了这个解决方案。
-
顺便说一句,使用 CursorLoader 时,您无需在活动代码中执行任何操作:每次 Cursor 更改时都会调用 onLoadFinished
标签: android textview simplecursoradapter android-cursorloader android-viewbinder