2013-03-30 2 views
1

SimpleAdapter을 채울 때 문제가 발생합니다. getView() 메서드에서 비디오가 이미 있는지 확인합니다. 이미 존재하는 경우 버튼 이미지를 '재생'이미지로 변경합니다. 그렇지 않으면, 나는 그것의 "다운로드"심상을 지킬 것이다. 문제는 내가 목록을 스크롤 할 때 모든 버튼을 "재생"이미지로 변경하는 것입니다. 이것은 내 코드이며, 나는 무엇을 잘못 했는가? 의 else 절에서버튼의 배경을 변경하면 SimpleAdapter 문제가 발생하여 모든 항목이 변경됩니다.

public View getView(int position, View convertView, ViewGroup parent) { 
    View row=super.getView(position, convertView, parent); 

    TextView videoIdText = (TextView) row.findViewById(R.id.videoId); 
    Button downloadButton = (Button) row.findViewById(R.id.videoDownload); 

    final String videoId = videoIdText.getText().toString(); 

    if (videoExists(videoId)) { 

     downloadButton.setBackgroundResource(R.drawable.ic_play); 
     Drawable d = downloadButton.getBackground(); 
     d.setColorFilter(Color.parseColor("#00AA00"),Mode.SRC_ATOP); 

     downloadButton.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       if (activity !=null){ 
        ((FeedActivity)activity).playVideo(getVideoPath(videoId)); 
       }  
      } 
     });  
    }else{ 
     downloadButton.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       DownloadTask task = new DownloadTask(); 
       task.setVideoId(videoId); 
       task.execute(); 
      } 
     });   
    } 

답변

2

당신의 "if(videoExists(videoId))는"기본 "다운로드"버튼을 이미지와 컬러 필터를 설정해야합니다.

목록을 스크롤 할 때 항목이 다시 사용되므로 새 설정이있는 단추는 현재 재생되지 않는 다른 항목의 새 설정으로 재사용됩니다.


는 : @ 데이비드 Manpearl 언급했듯이

if (videoExists(videoId)) { 
    downloadButton.setBackgroundResource(R.drawable.ic_play); 
    Drawable d = downloadButton.getBackground(); 
    d.setColorFilter(Color.parseColor("#00AA00"), Mode.SRC_ATOP); 
    ... 
} else { 
    downloadButton.setBackgroundResource(R.drawable.ic_download); 
    Drawable d = downloadButton.getBackground(); 
    d.setColorFilter(Color.parseColor("<download-color>"), Mode.SRC_ATOP); 
    ... 
} 
+0

돈의 버튼을 저장하는 데 필요한 정답을 수락 (확인)하는 것을 잊지 마십시오. –

0

저는 원래 이미지를 설정할 필요가 있지만, 태그도

public View getView(int position, View convertView, ViewGroup parent) { 
    View row=super.getView(position, convertView, parent); 

    TextView videoIdText = (TextView) row.findViewById(R.id.videoId); 
    Button downloadButton = (Button) row.findViewById(R.id.videoDownload); 

    final String videoId = videoIdText.getText().toString(); 

    if (row.getTag() == null){ 
     row.setTag(downloadButton); 
    }else{ 
     downloadButton = (Button) row.getTag(); 
    } 

    if (videoExists(videoId)) { 

     downloadButton.setBackgroundResource(R.drawable.ic_play); 
     Drawable d = downloadButton.getBackground(); 
     d.setColorFilter(Color.parseColor("#00AA00"),Mode.SRC_ATOP); 

     downloadButton.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       if (activity !=null){ 
        ((FeedActivity)activity).playVideo(getVideoPath(videoId)); 
       }  
      } 
     });  
    }else{ 
     downloadButton.setBackgroundResource(R.drawable.ic_download); 
     downloadButton.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       DownloadTask task = new DownloadTask(); 
       task.setVideoId(videoId); 
       task.execute(); 
      } 
     });   
    } 
관련 문제