2013-01-24 3 views
0

Android 애플리케이션에 gallery 위젯이있어 자동차 이미지를 표시합니다. (실제로 자동차가 아니지만 자동차가 예입니다). 갤러리는 갤러리에서 항목 당 자동차의 하나 개의 모델을 보여주고, 그래서 우리는 같은 갤러리있을 수 있습니다 :캐시 된 갤러리 이미지를 선택적으로 무효화하려면 어떻게해야합니까?

  1. 포드 모델 T
  2. 포르쉐 911
  3. 포드 머스탱

을 때 사용자가 긴 갤러리의 항목을 누르면, 그들은 — 자동차의 새로운 이미지를 선택할 수 있습니다. 사용자가 Ford Mustang 이미지를 오랫동안 누르면 Ford Mustangs의 새로운 사진 갤러리가 보입니다. 그들은 실제로 메인 갤러리에서보고 싶어합니다 (어쩌면 노란 색 대신에 빨간 색을 보는 것).

이것은 코드에서 꽤 잘 작동합니다. — 저는 int의 배열을 가지고 있습니다. 각 int의 배열은 자동차의 각 모델에 대한 배열이며, 각 int는 이미지의 인덱스를 나타냅니다.

사용자는 새 이미지를 선택한 다음 로그는 말한다 :

 
MoreCarImagesGallery: User selected image 3 for car with ID 219 (Ford Mustang) 
MainGalleryAdapter: Setting selected image (3) for car at position 2 

adapter의 getView()를 다음을 수행합니다 그러나

Image img = imageLookup.getImageForCar(car.id, selectedImageIndexes[position]); 

! 다시 메인 갤러리로 돌아 가면 문제의 자동차에 대해 이전에 표시된 이미지가 계속 표시됩니다. 그러나! 표시되는 자동차에서 왼쪽 또는 오른쪽으로 몇 가지 항목을 스크롤 한 다음 해당 자동차로 다시 스크롤하면 이미지가 "새로운"(사용자가 선택한) 이미지로 업데이트됩니다.

분명히 갤러리가 내 어댑터에서 일부 이미지 캐싱을하고 있습니다. 갤러리가 느린 전화기에서 그 자리에 캐싱을하지 않으면 매우 느려질 것이라고 상상하기 때문에 그 일이 계속 일어나기를 원할 것입니다.

내 갤러리의 이미지를 무효화하여 어댑터 getView()가 "새"이미지를 반환하도록하려면 어떻게합니까?

답변

1

실제로 갤러리 어댑터 뒤의 데이터를 업데이트했다고 가정하면 데이터를 변경 한 후 기본 갤러리의 어댑터에서 notifyDatasetChanged()를 호출 할 수 있습니다.

http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()

+0

덕분에, 그 잘 작동합니다 - 질문 대신 한 번에 전체 캐시에서 바로 항목을 무효화하는 방법이 있나요? – George

+1

당신은 다음과 같이 할 수 있습니다 : http://stackoverflow.com/a/9987714/317862하지만 제 테스트에서 당신은 실제로 많은 성능 향상을 보지 않을 것입니다. 목록을 새로 고침하는 것이 표준입니다. 다른 관찰이 있으면보고 싶을 것입니다. – sgarman

+0

충분히 공정한, 나는 성능 저하가 보이지 않는 한 그냥 떠날 것입니다. 네가 말한 것 같지는 않을거야. – George

관련 문제