0

这是我正在处理的应用程序中 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 和模拟器上找到。

4

1 回答 1

1

如果isDefault是假的,你永远不会隐藏你的 favStar 视图。如果您的元素设置为 true 并且您显示视图,则星形将可见,直到您再次隐藏它。当视图被回收时,即使它不应该出现,星星仍然会显示。您在 nexus 7 上看不到它,因为您可能没有足够的元素来实现这一点,因为它的屏幕比手机的高。无论如何,将您的代码更改为类似的东西应该可以解决它:

if (isDefault) {
  aq.id(R.id.favStar).visible(); //favStar defaults to GONE.
} else {
  //set favStar to View.GONE here
}
于 2013-03-05T01:48:05.603 回答