gpt4 book ai didi

java - Android SimpleCursorAdapter.ViewBinder 不更新绑定(bind)的 TextView

转载 作者:行者123 更新时间:2023-11-29 05:58:03 25 4
gpt4 key购买 nike

我有一个 SimpleCursorAdapter,我正在尝试将 SimpleCursorAdapter.ViewBinder 绑定(bind)到它。下面是我正在使用的代码。

// 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;

}
}

问题

当我加载 Activity 时,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 服务器调用返回并且线程更新光标指向的行。

提前致谢。

最佳答案

除了在这两个 TextViews 上设置文本之外,您还打算做其他事情吗?如果答案是否定的,那么您没有理由使用 ViewBinder,因为 SimpleCursorAdapter 默认会为您设置文本。

无论如何,我不明白您为什么使用 columnIndex 参数来标识 View 而不是传入的 View 的 id。看看这是否有帮助:

public boolean setViewValue(View view, Cursor cursor, int columnIndex) {        
if (view.getId() == R.id.txtvwProfileUserFullName) {
String userFullName = cursor.getString(columnIndex);
((TextView) view).setText(userFullName);
return true;
} else if (view.getId() == R.id.txtvwProfileOtherUserInfo) {
String userEmail = cursor.getString(columnIndex);
((TextView) view).setText(userEmail);
return true;
} else {
return false;
}
}

关于java - Android SimpleCursorAdapter.ViewBinder 不更新绑定(bind)的 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11278782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com