【问题标题】:Add a SimpleCursorAdapter to a TextView将 SimpleCursorAdapter 添加到 TextView
【发布时间】: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


【解决方案1】:

在您的代码(活动/视图)中使用 ContentResolver.registerContentObserver(Uri, boolean, ContentObserver)ContentResolver.notifyChange(Uri, ContentObserver) 在 ContentProvider 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多