我有一个 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 不会使用来自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 服务器调用返回并且线程更新光标指向的行时。
提前致谢。