我正在尝试从ListView中的Cursor显示信息,每行包含一个ImageView和一个TextView.我有一个CustomCursorAdapter扩展CursorAdapter,在bindView中我评估光标中的数据并根据它设置视图图像和文本.
当我运行应用程序时,ListView显示正确的行数,但它们是空的.我知道我在覆盖bindView时遗漏了一些东西,但我不确定是什么.
任何帮助将不胜感激.
private class CustomCursorAdapter extends CursorAdapter {
public CustomCursorAdapter() {
super(Lmw.this,monitorsCursor);
}
@Override
public View newView(Context context,Cursor cursor,ViewGroup parent) {
LayoutInflater layoutInflater = getLayoutInflater();
return layoutInflater.inflate(R.layout.row,null);
}
@Override
public void bindView(View view,Context context,Cursor cursor) {
try {
int monitorNameIndex = cursor.getColumnIndexOrThrow(DbAdapter.MONITORS_COLUMN_MONITOR_NAME);
int resultTotalResponseTimeIndex = cursor.getColumnIndexOrThrow(DbAdapter.RESULTS_COLUMN_TOTAL_RESPONSE_TIME);
String monitorName = cursor.getString(monitorNameIndex);
int warningThreshold = cursor.getInt(resultTotalResponseTimeIndex);
String lbl = monitorName + "\n" + Integer.toString(warningThreshold) + " ms";
TextView label = (TextView) view.findViewById(R.id.label);
label.setText(lbl);
ImageView icon = (ImageView)view.findViewById(R.id.icon);
if(warningThreshold < 1000) {
icon.setimageResource(R.drawable.ok);
} else {
icon.setimageResource(R.drawable.alarm);
}
} catch (IllegalArgumentException e) {
// Todo: handle exception
}
}
}
最佳答案
bindView()方法似乎没问题.
尝试替换newView()方法:
@Override
public View newView(Context context,ViewGroup parent) {
return mInflater.inflate(R.layout.row,parent,false);
}
并且,出于性能原因:
>在中移动getLayoutInflater()
构造函数
>与所有cursor.getColumnIndexOrThrow()调用相同,
已经说过了
评论
>使用StringBuilder创建lbl文本
>没有必要做Integer.toString(warningThreshold)……
只需使用warningThreshold
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。