2012-03-27 2 views
2

각 행에 TextViewImageButton을 포함하는 ListView에 대해 ArrayAdapter를 구현했습니다. 하여 ImageButton의 배경 이미지가 어떤 조건에 따라이 두 가지 옵션을 사용할 수 있습니다 파일이 존재하는 경우안드로이드 : ImageButton의 배경을 동적으로 바꿔서 보여주기

public View getView(int position, View convertView, ViewGroup parent) { 
      View vi=convertView; 
      if(convertView==null) 
       vi = inflater.inflate(R.layout.item_with_button, null); 

      File f = new File(PATH_TO_FILE); 
      if(f.exists()){ 
       imbutton =(ImageButton)vi.findViewById(R.id.btn_image); 
       imbutton.setBackgroundResource(R.drawable.done); 
      }else 
      { 
       imbutton =(ImageButton)vi.findViewById(R.id.btn_image); 
       imbutton.setBackgroundResource(R.drawable.download); 
       imbutton.setOnClickListener(new View.OnClickListener() {   
        public void onClick(View v) { 
         String url = URL; 
         new DownloadFileAsync(pos).execute(url); 
        } 
       }); 
      } 
... 
return vi; 
} 

은, 그때하여 ImageButton에 대한 이미지를 "수행"을 설정합니다. 파일이 없으면 "다운로드"이미지를 설정합니다.

사용자가 ImageButton을 클릭하면 파일이 다운로드되고 각각의 이미지를 변경해야합니다. getView은 화면에서이 ImageButton이 사라질 때까지 사용자가 ListView을 스크롤 한 다음 뒤로 스크롤 할 때만 호출됩니다. 버튼을 누르면 새 배경 이미지가 나타납니다.

그러나 지금은 새 이미지를 표시하는 버튼을 무효화 할 수 없습니다.

나는 비동기 다운로드를 위해이 클래스를 사용 : http://www.java-samples.com/showtutorial.php?tutorialid=1521

나는

@Override 
protected void onPostExecute(String unused) { 
     activity.dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
} 

하지만 성공하지 않고 기능

currentbutton.invalidate() 같은 것을 확인했습니다.

ImageButton의 새로운 배경 이미지를 표시하려면 어떻게해야합니까?

답변

1

당신은 notifyDataSetChanged를 부를 수 onClick 리스너에 추가하여 강제로 목록을 새로 고칩니다. 나는 어댑터를 명시 적으로 변경하지 않고 (즉, 항목을 추가, 제거 또는 업데이트 함) 작동하지 않을지 잘 모르겠습니다.

나중에 확인하고 상자에서 작동하지 않는 경우 추가 제안 사항을 작성해 보겠습니다.

EDIT : 실제로는 onClick 리스너가 아닌 사용중인 AsyncTask의 onPostExecute 메소드에서 notifyDataSetChanged으로 호출해야합니다.

+0

Brilliant, thanks –

1

이 하나를 시도 : 당신의 getView에서 참조로 https://github.com/thest1/LazyList

그리고 누른 후 버튼 특정 이미지 뷰에 이미지를로드합니다.

+1

내 arrayAdapter가 수정되었습니다. LazyAdapter. 이미지를 올바르게로드합니다. 이미지가 동적으로 변경되고 문제가있는 경우 –

0

당신이 당신의 AsyncTask에 전달 시도 할 수는의 Button보기 당신의 AsyncTask에 클릭 : 다음

new DownloadFileAsync(imButton).execute(url); 

하고, 당신의 방법 onPostExecute(), 당신은 호출 할 수

this.btnClicked.setBackgroundResource(R.drawable.done); 
+1

을 무효화했으나 버튼이 무효화되지 않았습니다. getView 메소드가 프로그래밍 방식으로 어떤 방법으로 호출되어야한다고 생각합니다. –

관련 문제