4

ListView 안에 ImageView으로 이미지를 설정할 수있는 방법이 있습니까? 이 경우 모든 필드를 표시하고 ViewBinder을 사용하여 이미지 비트 맵을 ImageView으로 설정하려면 SimpleCursorAdapter을 사용하고 있습니다. 이미지는 AsyncTask을 사용하여 다운로드됩니다. 필자가 작성한 코드는 다음과 같습니다.SimpleCursorAdapter 및 ViewBinder를 사용하여 ListView 항목의 이미지 설정

private void updateTimelineUI() { 
     Cursor data = dbHelper.query(Constants.TABLE_NAME, null, null); 
     if (data.moveToFirst()) { 
      adapter = new SimpleCursorAdapter(this, R.layout.tweet_row, data, new String[] {Constants.CREATED_TIME, Constants.USERNAME, Constants.PROFILE_IMAGE, Constants.TWEET}, new int[] {R.id.time, R.id.username, R.id.userImageView, R.id.tweetMessage}); 
      SimpleCursorAdapter.ViewBinder viewBinder = new SimpleCursorAdapter.ViewBinder() { 
       public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
        if(view != null && view.getId() != R.id.userImageView) { 
         return false; 
        } 
       String imageUrlString = cursor.getString(columnIndex); 
       String username = cursor.getString(cursor.getColumnIndex(Constants.USERNAME)); 
       String path = getDir("images", MODE_PRIVATE).getAbsolutePath() + "/" + username + ".png"; 
       ImageDownloader downloader = new ImageDownloader(); 
       downloader.setImageUrlString(imageUrlString); 
       downloader.setImageView(view); 
       downloader.setFilePath(path); 
       downloader.execute(imageUrlString); 
       return true; 
       } 
      }; 
      int index = data.getColumnIndex(Constants.PROFILE_IMAGE); 
      //Log.d(Constants.TAG, "" + index); 
      adapter.setViewBinder(viewBinder); 
      viewBinder.setViewValue(userImageView, data, index); 
      timelineList.setAdapter(adapter); 
     } 
    } 

이 방법으로 이미지를 올바른 행으로 설정하는 방법이 있습니까?

현재 가지고있는 코드를 사용하면 이미지가 성공적으로 다운로드됩니다. 그러나 이미지가 임의로 설정됩니다.

답변

2

당신은 SimpleCursorAdapter에서 상속해야 자신의 어댑터를해야하기 때문에 당신은 당신의 사용자 정의 디자인과 자신의 ListView 항목을 만들 수 있습니다 당신은 당신이 이미지 뷰

포함 원하는대로 UI 요소를 추가 할 수있는 그것을 위해 사용자 정의 레이아웃을 설정
+0

내 자체 어댑터를 작성하는 것 외에 다른 방법은 없습니까? 이미지를 imageView로 설정할 수 있지만 이미지가 무작위로 변경되어 현재 코드로 수행 할 수 있는지 궁금합니다. –

+1

요점은 목록을 스크롤하는 동안 자신의 어댑터를 만들지 않으면 listItem이 무엇을 어떤 그림을 렌더링할지 알 수 없으므로 다른 이미지를 렌더링하여 모든 스크롤링에 대한 이미지를 변경하게됩니다. 그 이유는 자신의 어댑터를 구현하고 모든 ListItem에서 항목을 추적해야합니다. –

2

Serdar Dogruyol 언급처럼 SimpleCursorAdapter을 상속하는 맞춤 클래스를 만들었습니다. 이 커스텀 클래스 내에서 I @Override bindView. 내부 bindViewsuper을 호출 한 다음 view.findViewById을 사용하여 ImageView을 처리하고 viewbindView에 전달 된 매개 변수 중 하나입니다.