2015-01-24 1 views
1

ListView에 인터넷의 이미지가있는 일부 HTML을 표시해야합니다. 이미지는 사용자 정의 Html.ImageGetter에서 처리됩니다. 문제는 내부에 이미지를 다운로드 할 수있는 TextView이 필요합니다. 따라서 ArrayAdaptergetView 메서드 내부에 HTML 구문 분석을 통합해야합니다. 하지만이 메소드는 안드로이드 시스템에서 요소를 재활용하고 다시 그릴 때 매우 자주 호출됩니다.ListView 내부의 사용자 정의 ImageGetter가있는 Html.fromHtml() 재활용 문제

어떻게하면이 재활용이 중단 될 수 있습니까? 다른 흐름을 사용해야한다고 가정합니다.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView view = new TextView(context); 
    CharSequence element = getItem(position); 
    CharSequence html = Html.fromHtml(element.toString(), new MessageImageGetter(context, view), null); 
    view.setText(html); 

    view.setPadding(12, 4, 12, 4); 

    return view; 
} 

어쩌면 목록과 같은 행동을 재활용 자주 다시 그리기하지 않습니다 ListViewArrayAdapter의 사용없이 가능하다 : 이것은 내 현재 getView() 방법이다.

답변

1

어떻게하면 이러한 재활용이 중단 될 수 있습니까?

그렇지 않습니다. 더 풍부한 모델 객체를 만듭니다.

  • Thing 기존 문자열 값 (element)
  • Thing 캐시
  • 귀하의 getView()가에서 htmlCharSequence을 가져옵니다 Html.fromHtml() 결과를 원하는 분야 오히려 ListAdapter<String>로 보이는 가진보다는 ListAdapter<Thing>을 가지고 Thing이므로 캐싱을 활용할 수 있습니다.

Thing보다 더 명료 한 명사를 자유롭게 대치해라. :-)

+0

이 'Thing'을 TextView로 만들 수 있습니까? 'Html.fromHtml()'*은 이미지를 다운로드 할 수있는 TextView를 필요로하므로 사용할 수 있어야합니다. – tolgap

+0

@tolgap : "이 일을 TextView로 만들면 받아 들일 수 있습니까?" -- 아니. 위젯은 비쌉니다. 'ListView'와'ListAdapter'의 목표는'getView()'처리의 일부로 그것들을 재활용하는 것입니다. "Html.fromHtml()은 이미지를 다운로드 할 수 있도록 TextView가 필요하므로 사용 가능해야합니다."- Html.fromHtml()은'TextView'와 아무 관련이 없습니다. 그것은 'Spannable'을 만듭니다. 'TextView'에 넣었을 겁니다. 'ImageGetter'에 의해 반환 된 Drawables은'Spannable' 자체에 저장됩니다. TextView는 렌더링시에만 사용됩니다. – CommonsWare

+0

'ImageGetter'에'TextView'를 포함시키지 않으면 다운로드가 완료되면'Drawable'을 표시하기 위해'TextView'를 무효화 할 수 없습니다. 다른 아이템이리스트에 추가되거나 스크롤이 시작될 때까지 Drawables가 보이지 않게됩니다. – tolgap