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);
}
}
이 방법으로 이미지를 올바른 행으로 설정하는 방법이 있습니까?
현재 가지고있는 코드를 사용하면 이미지가 성공적으로 다운로드됩니다. 그러나 이미지가 임의로 설정됩니다.
내 자체 어댑터를 작성하는 것 외에 다른 방법은 없습니까? 이미지를 imageView로 설정할 수 있지만 이미지가 무작위로 변경되어 현재 코드로 수행 할 수 있는지 궁금합니다. –
요점은 목록을 스크롤하는 동안 자신의 어댑터를 만들지 않으면 listItem이 무엇을 어떤 그림을 렌더링할지 알 수 없으므로 다른 이미지를 렌더링하여 모든 스크롤링에 대한 이미지를 변경하게됩니다. 그 이유는 자신의 어댑터를 구현하고 모든 ListItem에서 항목을 추적해야합니다. –