SimpleCursorAdapter があり、それに SimpleCursorAdapter.ViewBinder をバインドしようとしています。以下は私が使用しているコードです。
// Setup Cursor and SimpleCursorAdapter, called in Activity onResume()
Cursor userCursor = getUserProfile(userEmail);
mAdapter = new SimpleCursorAdapter(this,
R.layout.user_profile,
userCursor,
new String[] {
StackOverFlow.Users.FULL_NAME,
StackOverFlow.Users.EMAIL },
new int[] {
R.id.txtvwProfileUserFullName,
R.id.txtvwProfileOtherUserInfo } );
mAdapter.setViewBinder(new UserProfileViewBinder());
私の UserProfileViewBinder クラス:
private class UserProfileViewBinder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
TextView tv;
switch (columnIndex) {
case 1: // TODO: Magic Numbers, bad!
tv = (TextView) view.findViewById(R.id.txtvwProfileUserFullName);
String userFullName = cursor.getString(columnIndex);
tv.setText(userFullName);
break;
case 2: // TODO: Magic Numbers, bad!
tv = (TextView) view.findViewById(R.id.txtvwProfileOtherUserInfo);
String userEmail = cursor.getString(columnIndex);
tv.setText(userEmail);
break;
}
return true;
}
}
問題
アクティビティをロードすると、TextView が .xml からのデータで更新されませんuserCursor
。userCursor
実際には、バッキング SQLite データベースの有効な行を指していて、データがあることを確認できますが、setViewValue
メソッドUserProfileViewBinder
が実行されているようには見えません。何が間違っているのか、または含めることを怠っているのかわかりません。
別の方法として、TextView のテキストを設定するために次のことを行っています。
if (mAdapter.getCursor().moveToFirst()) {
mUserFullName.setText(mAdapter.getCursor().getString(
StackOverFlow.USER_FULL_NAME));
mUserOtherInfo.setText(mAdapter.getCursor().getString(
StackOverFlow.USER_EMAIL));
}
しかし、カーソルデータが変更されたときに TextView が自動的に更新されるとは思いません。クエリの実行後にContentProvider
呼び出しがsetNotificationUri
行われ、REST サーバー呼び出しが返され、スレッドがカーソルが指している行を更新するとき。
前もって感謝します。