adapter.getview 外循环中的 IllegalStateException

IllegalStateException in adapter.getview outside loop

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

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

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

有人知道这是为什么吗?

谢谢!

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