我有一個SimpleCursorAdapter,我試圖將一個SimpleCursorAdapter.ViewBinder綁定到它。以下是我正在使用的代碼。Android SimpleCursorAdapter.ViewBinder沒有更新綁定TextView
// 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數據庫中的一個有效行,並且有數據,但UserProfileViewBinder
中的setViewValue
方法似乎從未執行。我不確定我做錯了什麼,或者忽略了包括在內。
作爲替代方案,我做以下設置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服務器調用返回並且線程更新光標指向的行。
在此先感謝。