2016-08-22 11 views
0

해결할 수없는 이상한 문제에 직면하고 있습니다. 이 느리다 그러나바깥 쪽 adapter.getview의 IllegalStateException

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

:

나는 그 올바르게의 일을하고 다음 루프를 가지고있다. 성능 향상을 위해, 그리고 모든 listItem이 같은 크기를 가지기 때문에 처음 두 줄을 루프 바깥에 놓기를 원합니다. 이것은 내가 시도하는 방법입니다

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

사람이 그 이유 어떤 생각을 가지고 있습니까 :

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

그러나이 첫 번째 줄에 나에게 예외를 제공?

감사합니다.

+0

adapterCount == 0. 그렇습니다. – greenapps

+2

항목의 높이가 모두 같은 경우 루프가 필요 없습니다. 최종 높이는'adapterCount'와'height'입니다. – Blackbelt

+0

답장을 보내 주셔서 감사합니다. 내 생각은 높이를 한 번 계산 한 다음 adapterCount로 곱하는 것입니다. 그러나 내가하는 일은 신비하게도 예외를줍니다. –

답변

1

당신이하고있는 일은리스트 뷰의 전체 아이디어에 완전히 상반됩니다. getView를 호출하면 목록의 모든 행에 대한 행보기가 작성됩니다. 그것이 listView가 피할 수있는 것입니다. 더 나쁜 것은, 당신도 그들을 저장하지 않습니다. 그래서 당신은 그들을 목적없이 창조하고 있습니다. 이것은 결코 잘 수행되지 않을 것이며, 전혀하지 않아야합니다. 필요한 경우 앱을 잘못 설계하는 것입니다.

+0

두 개의 잠재적 인 큰 ListView (서로 다른 테이블에서 가져온 데이터)를 서로 위에 놓고 하나의 큰 목록보기처럼 원활하게 스크롤 할 수있는 다른 방법이 있습니까? –

+1

두 개의 목록보기를 사용하지 마십시오? 하나의 목록보기로 만듭니다. 목록 뷰의 모든 행이 동일한 유형의 뷰를 가져야하는 것은 아니라는 점을 기억하십시오. 이들 모두를 하나의 어댑터로 결합하거나 어댑터 어답터 방식을 사용할 수 있습니다. –

+0

감사합니다. 내 접근 방식을 다시 생각해 보겠습니다. –