[英]A switch in my bindView is not running the expected cases
我正在尝试使用ImageView
和SQLite数据库中的三个TextView填充列表。 我期望的是TextView
的数据,但ImageView
永不更改。
ImageView
应该根据y列中x行的Cursor值在两个图标之间交换。 该列填充有1
或0
的Integer
。 如果y @行x ImageView
1,则红色图像应填充ImageView
。 如果为0,则绿色图像应为。
那似乎永远不会发生。 它始终是红色图像,logcat总是说光标的值为1。
04-14 08:24:04.188: A/example.stackoverflow.MainActivity@1840e274(6510):
04-14 08:24:04.191: D/cursor@iconHolder(6510): 1
04-14 08:24:04.191: D/icon(6510): true 1
04-14 08:24:04.191: V/date(6510): 2015-04-14 becomes April, 14
04-14 08:24:04.192: A/example.stackoverflow.MainActivity@1840e274(6510):
04-14 08:24:04.193: D/cursor@iconHolder(6510): 1
04-14 08:24:04.194: D/icon(6510): true 1
这是SQLite数据库的片段。
_id, weight, height, body_mass_index, icon, date
"1","45.359233334609435","1778.003556007112","14.348300215310468","0","2015-04-14"
"2","47.627195001339906","1778.003556007112","15.06571522607599","1","2015-04-14"
"3","45.359233334609435","1778.003556007112","14.348300215310468","0","2015-04-14"
如您所见,该图标应该先是绿色,然后是红色,然后是绿色,但是它只是三遍都变成红色。 在弄清为什么我的代码不起作用的过程中,我将非常感谢您的帮助。 这是我的bindView
。
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView iconView = (ImageView) view.findViewById(R.id.richListIcon);
TextView weightInfo = (TextView) view.findViewById(R.id.personal_item1);
TextView bmiInfo = (TextView) view.findViewById(R.id.personal_item2);
TextView dateInfo = (TextView) view.findViewById(R.id.timestamp_item);
int indexWeight;
int indexBmi;
int indexDate;
String weightHolder = null;
String weightModified = null;
String bmiHolder = null;
String bmiModified = null;
String dateHolder = null;
String upDateHolder = null;
int iconHolder = 3;
int iconSet;
if (cursor != null) {
Log.wtf(String.valueOf(getActivity()), "not null");
iconHolder = (cursor.getColumnIndex
(DatabaseAdapter.DataManager.publicIconSetter));
Log.d("cursor@iconHolder", String.valueOf(cursor.getColumnIndexOrThrow
(DatabaseAdapter.DataManager.publicIconSetter)));
weightHolder = (String.valueOf
(cursor.getDouble(cursor.getColumnIndex
(DatabaseAdapter.DataManager.publicWeight))));
bmiHolder = (String.valueOf
(cursor.getDouble(cursor.getColumnIndex
(DatabaseAdapter.DataManager.publicBMI))));
dateHolder = (String.valueOf
(cursor.getString(cursor.getColumnIndex
(DatabaseAdapter.DataManager.publicDate))));
}
switch (iconHolder){
case 0:
iconSet = R.mipmap.green_icon;
Log.d("icon", "false " + iconHolder);
break;
case 1:
Log.d("icon", "true " + iconHolder);
iconSet = R.mipmap.red_icon;
break;
default: iconSet = R.mipmap.ic_launcher;
Log.wtf("IVF_IconSetter", "Error, value from table is " + iconHolder);
}
iconView.setImageResource(iconSet);
...
}
还有我的十字军
public Cursor getAllData(){
SQLiteDatabase database = dataManager.getReadableDatabase();
String[] columns = {DataManager.UID,
DataManager.Icon_Gained_Weight,
DataManager.Weight,
DataManager.BMI,
DataManager.Date
};
String orderBy = DataManager.UID + " DESC";
Cursor cursor = null;
try {
cursor = database.query(DataManager.TABLE_NAME, columns, null, null, null, null, orderBy);
if(cursor != null){
cursor.moveToFirst();
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return cursor;
}
Playmaker420已解决了此问题。 如果Playmaker420选择不这样做,我会写下答案。
方法getColumnIndex()返回列的索引/位置,而不是其值。 在您的情况下,返回的值始终为“ 1”,因为它是第二列(如在columns数组中所见)。 您应该使用getInt()方法:
iconHolder = (cursor.getInt(cursor.getColumnIndex(/** here goes the column name */)));
System.out.println(cursor.getString(cursor.getColumnIndex("icon"));
这应该打印列“ icon”的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.