这是我正在处理的应用程序中 ListView 的右侧。
如您所见,ImageView
在 9 个条目的列表中,一个星号出现了两次。
这是 this 使用的 BindViewListView
方法CursorAdapter
:
@Override
public void bindView(View v, Context context, Cursor c) {
AQuery aq = new AQuery(v);
MyDatabaseHelper helper = new MyDatabaseHelper(context); //Used for various bits of text-setting. Is largely unrelated to the question.
boolean isDefault = (c.getShort(c.getColumnIndexOrThrow(MyDatabaseHelper.DEFAULT))==1);
Log.d("Binding account to view", "Entry "+currentID+"isDefault: "+isDefault);
v.setTag(isDefault);
if (isDefault) {
aq.id(R.id.favStar).visible(); //favStar defaults to GONE.
}
helper.close();
}
如您所见,它检查我的数据库中的列是否读取 1,然后将该位布尔数学存储在变量中。使用该变量,它标记View
,报告该变量的状态,然后当且仅当变量为真时,它才使星形可见。
这是添加第 9 个条目之前正在填充的列表的日志输出:
02-28 10:50:23.381: D/Binding account to view(20759): Entry 1isDefault: false
02-28 10:50:23.397: D/Binding account to view(20759): Entry 2isDefault: false
02-28 10:50:23.413: D/Binding account to view(20759): Entry 3isDefault: false
02-28 10:50:23.420: D/Binding account to view(20759): Entry 4isDefault: false
02-28 10:50:23.436: D/Binding account to view(20759): Entry 5isDefault: false
02-28 10:50:23.444: D/Binding account to view(20759): Entry 6isDefault: false
02-28 10:50:23.459: D/Binding account to view(20759): Entry 7isDefault: false
02-28 10:50:23.475: D/Binding account to view(20759): Entry 8isDefault: true
02-28 10:50:23.498: D/Binding account to view(20759): Entry 1isDefault: false
02-28 10:50:23.506: D/Binding account to view(20759): Entry 2isDefault: false
02-28 10:50:23.530: D/Binding account to view(20759): Entry 3isDefault: false
02-28 10:50:23.553: D/dalvikvm(20759): GC_CONCURRENT freed 122K, 2% free 11069K/11271K, paused 3ms+15ms, total 43ms
02-28 10:50:23.553: D/Binding account to view(20759): Entry 4isDefault: false
02-28 10:50:23.577: D/Binding account to view(20759): Entry 5isDefault: false
02-28 10:50:23.592: D/Binding account to view(20759): Entry 6isDefault: false
02-28 10:50:23.600: D/Binding account to view(20759): Entry 7isDefault: false
02-28 10:50:23.616: D/Binding account to view(20759): Entry 8isDefault: true
(添加第 9 个条目只会在日志输出中添加一个“Entry 9isDefault:false”。)
谁能告诉我为什么我的列表中有一个星出现在调试日志指出不应该出现的位置?无论是ListFragment
出现ListView
在其中的 Activity 还是包含该 Activity 的ListFragment
任何地方都对 R.id.favStar 进行任何引用。
进一步详细说明:我也尝试过不使用 AQuery (使用FindViewById()
and setVisible()
),结果没有更改为调试日志中显示的预期结果。被窃听的星星总是出现在第一个位置,并且只有在列表中的另一颗星星应该出现时才会出现。(DatabaseHelper 类在设置 ISDEFAULT=1 之前将数据库中的所有项目设置为 ISDEFAULT=0。)奇怪的是,使用 ADT 为您提供的主/详细信息流模板,这个错误在我的 Nexus 7 上是不可复制的,但可以在我的 Galaxy Nexus 和模拟器上找到。