2014-01-24 4 views
1

위해 호출 될 때 확인 I이 (ListView를 채 웁니다) 내 어댑터의 방법의 getView에 다음 코드ListView에,의 getView가 마지막으로

public View getView(int position, View parent, ViewGroup root) { 
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.my_layout, null); 
    ImageView imageView = view.findViewById(R.id.myImageView); 
    String address = addresses[position]; 
    MyNetworkLibrary.loadAndSetImage(address, imageView); 
    return view; 
} 

ListView에의 세포가 이미지 뷰를 가지고있는 그들 원격 이미지를로드하십시오.

메서드 MyNetworkLibrary.loadAndSetImage는 원격 이미지를 다운로드하고 응답을 받으면이를 ImageView에 설정합니다. 문제는 getView 메소드가 ListView의 각 행에 대해 두 번 이상 호출된다는 것입니다. 이미지를 캐시에 저장하지 않아도 내 앱이 각 행에 둘 이상의 요청을 수행하기 때문입니다.

getView가 마지막으로 한 행에 대해 호출 될 때를 알 수있는 방법이 있습니까? 아니면 더 나은 솔루션에 대해 생각하십니까?

+0

단순화 할 게으른 목록을 사용하려고? – nKn

+0

width = match_parent, height = wrap_content – Massimo

+0

getView는 행이 표시 될 때마다 호출되므로 사용자가 위아래로 스크롤하면 해당 행에 대한 getView의 "마지막 호출"이 없습니다. "이미지가 캐시 ""왜 이미지를 캐싱하지 않습니까? 반대쪽은 퍼포먼스에 좋지 않은 getView에 대한 모든 호출에 대한 네트워크 호출을 의미합니다 ... – 2Dee

답변

1

question에서 예상보다 많은 시간이 호출되었습니다. 그것은 단지 그것에 대한 제 생각이기 때문에 확실하지 않습니다. 그러나 귀하의 질문에 귀하가 제안한 접근 방식이 올바른 것이 아니라고 생각합니다 .- 얼마나 많은 시간이 있었는지 계산할 필요가 없습니다. getView() 호출되지만 대신 할당을 효율적으로 처리합니다.

대안으로 getView() 방법의 행의 각 이미지를 참조하는 LazyList을 사용하여 이미지를로드 할 수 있습니다. 하지만 또 다른 가능한 해결책이 있습니다. (또한 더 우아하다고 생각합니다.) 나는 이것을 또 다른 question에서 제안했습니다. 희망이 당신을 돕는다.

관련 문제