在adapter.getview外部循环中出现IllegalStateException

时间:2016-08-22 15:01:56

标签: android listview android-cursoradapter

我遇到了一个我无法解决的最奇怪的问题。

我有以下循环,它正确地完成了它的工作:

for (int i = 0; i < adapterCount; i++) {
    View listItem = mListAdapter.getView(i, null, mListView);
    listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
    height += listItem.getMeasuredHeight();
}

然而它很慢。为了提高性能,并且因为每个listItem都具有相同的大小,我想将前两行放在循环之外。这就是我尝试的方式:

View listItem = mListAdapter.getView(0, null, mListView);
listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
for (int i = 0; i < adapterCount; i++) {
   height += listItem.getMeasuredHeight();
}

然而,这在第一行给了我一个例外:

java.lang.IllegalStateException: couldn't move cursor to position 0

有谁知道为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:1)

你正在做的事情完全违背了listview的整个想法。像这样调用getView会强制它为列表中的每一行创建一个行视图。这就是listView要避免的。更糟糕的是,你甚至没有拯救他们。所以你没有任何目的创造它们。这将永远不会很好,你根本不应该这样做 - 如果你认为你需要,你设计你的应用程序是错误的。