我遇到了一个我无法解决的最奇怪的问题。
我有以下循环,它正确地完成了它的工作:
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
有谁知道为什么会这样?
谢谢!
答案 0 :(得分:1)
你正在做的事情完全违背了listview的整个想法。像这样调用getView会强制它为列表中的每一行创建一个行视图。这就是listView要避免的。更糟糕的是,你甚至没有拯救他们。所以你没有任何目的创造它们。这将永远不会很好,你根本不应该这样做 - 如果你认为你需要,你设计你的应用程序是错误的。