안녕하세요 제가 문제를 설명 할 때 착각하고 있다면 저를 용서 해주세요. 두 개의 imageView와 두 개의 TextView가있는 Custom Base 어댑터가 있고 URL에서 이미지를 설정하기 위해 비동기 작업을 사용하고 있습니다. 이미지를 설정하지만 이미지를 자동으로 다시 변경합니다.
아래는 어댑터의 코드입니다.
public class SharedPhotosAdapter extends BaseAdapter{
Context context;
LayoutInflater inflater;
public static ArrayList<HashMap<String, String>> data;
ImageLoader imageLoader;
private static final String BRANCH="Branch";
private static final String DATE="DateTime";
private static final String STARS="Stars";
private static final String IMAGE_URL="URL";
private static final String USER_NAME="UserName";
TextView name,date,comment;
ImageView pro_image,shared_image;
public SharedPhotosAdapter(Context con,ArrayList<HashMap<String, String>> result) {
// TODO Auto-generated constructor stub
context=con;
data=result;
inflater = (LayoutInflater)context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View rowView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
Bitmap bitmap=null;
ImageView image = null;
HashMap<String, String> result=data.get(position);
if(rowView==null)
{
rowView=inflater.inflate(R.layout.shared_photos_item, null);
holder=new ViewHolder();
holder.name=(TextView)rowView.findViewById(R.id.textView1);
holder.date=(TextView)rowView.findViewById(R.id.textView4);
holder.comment=(TextView)rowView.findViewById(R.id.textView3);
holder.pro_image=(ImageView)rowView.findViewById(R.id.imageView1);
holder.shared_image=(ImageView)rowView.findViewById(R.id.imageView2);
rowView.setTag(holder);
}
else
{
holder = (ViewHolder)rowView.getTag();
}
new DownloadImageTask(holder.shared_image).execute(result.get(IMAGE_URL));
holder.name.setText(result.get(USER_NAME));
holder.date.setText(result.get(DATE));
holder.comment.setText(result.get(BRANCH));
return rowView;
}
public class ViewHolder
{
TextView name,date,comment;
ImageView pro_image,shared_image;
}
}
다음은 URL에서 이미지를 설정하는 데 사용하는 비동기 작업입니다.
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
}
return mIcon11;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
bmImage.setImageBitmap(result);
}
}
임의의 이미지를 이미지 뷰로 설정하면 내가 어디로 잘못 가고 있는지 알 수 없습니다. 약간의 도움이 될 것입니다.
감사
이미지 / 캐싱 등을 다운로드하는 번거 로움을 없애기 위해 Picasso 를 시도해 볼 것을 제안합니다 . 작업 공간에 jar가 있으면 어댑터 클래스의 getView () 메서드에서해야 할 일은 이것뿐입니다.
Picasso.with(context).load(result.get(IMAGE_URL)).into(holder.shared_image);
DownloadAsyncTask가 필요하지 않습니다. @zapl도 의견에서 제안했듯이 Volley 및 UniversalImageLoader와 같은 다른 라이브러리가 있지만 Picasso를 좋아했습니다. 또한 Picasso에서 제공하는 Transformation 인터페이스를 사용하여 둥근 이미지와 같은 변형을 쉽게 적용 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다