안녕하세요 안드로이드 초보프로그래머입니다..
일단 소스부터 보시죠..필요한 부분만 붙여넣겟습니다.
listvie adapter getview
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
try{
if (convertView == null) {
convertView = View.inflate(conn, R.layout.diary_listview, null);
}
if(null != convertView){
convertView.setTag(position);
iv_diaryimg = (ImageView)convertView.findViewById(R.id.iv_diaryimg);
iv_diaryimg.setImageResource(R.drawable.ic_launcher);
tv_diary_id = (TextView)convertView.findViewById(R.id.tv_diary_id);
tv_diary_date = (TextView)convertView.findViewById(R.id.tv_diary_date);
tv_diary_content = (TextView)convertView.findViewById(R.id.tv_diary_content);
JSONObject ob = mjsonarr.getJSONObject(position);
new DownLoadimage(iv_diaryimg,position).execute(ob.get("board_imgpath").toString());
tv_diary_id.setText(ob.get("membership_id").toString());
tv_diary_date.setText(ob.get("board_date").toString());
tv_diary_content.setText(ob.get("board_content").toString());
convertView.setOnClickListener(this);
}
}catch (Exception e) {
// TODO: handle exception
Log.d("ErrorLog", "ImageAdapter GetView : " + e.toString());
}
return convertView;
}
AsyncTask
//이미지 bitmap로드
class DownLoadimage extends AsyncTask<String, Void, Bitmap>{
private ImageView m_vimg;
private int po;
public DownLoadimage(ImageView v_img, int position) {
// TODO Auto-generated constructor stub
m_vimg = v_img;
po = position;
}
@Override
protected Bitmap doInBackground(String... urls) {
// TODO Auto-generated method stub
String url = urls[0];
Bitmap imgbitmap = null;
try{
InputStream in = new URL(url).openStream();
imgbitmap = BitmapFactory.decodeStream(in);
}catch (Exception e) {
// TODO: handle exception
Log.d("ErrorLog", "DiaryListViewAdapter : DownLoadimage = " + e.toString());
}
arrbitmap[po] = imgbitmap;
return imgbitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
m_vimg.setImageBitmap(result);
}
}
이렇게 되어 있구요
R.layout.diary_listview xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#808080"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_diary_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="20dp"
/>
<TextView
android:id="@+id/tv_diary_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:gravity="right"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_diary_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/iv_diaryimg"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_gravity="center"
/>
</LinearLayout>
</LinearLayout>
이렇게 코딩하엿습니다 현재 카카오스토리처럼 리스트뷰 어뎁터를 사용해서 커스텀 하구 있는 중인데요..
막히는 부분이.. 지금 스크롤을 천천히 하게 되면 AsyncTask가 천천히 호출되면서 서버에서 이미지를 잘 불러와
해당위치에 잘 출력됩니다.
하지만 빠른 스크롤시;;;; getview position이 계속 유동적으로 빨리 바뀌다보니 AsyncTask를 계속 호출해서
원하는 위치에 이미지가 제대로 출력되지 않습니다 제 생각인데 position 이 바뀌면서 계속 이미지를 불러오는 과정에서
생기는 부분같은데요 원하는 위치에 제대로 출력이 아예 되지 않는것은 아니구요
이미지들이 로드 되어 쌓여 잇다가 스크롤이 완료되는 시점에 계속 이미지가 바뀌면서 마지막엔 제대로 된 이미지를 덮어
쓰는것 같습니다.. 이걸 어떤방식으로 해결해야 할지.. 힌트좀 주시면 감사하겠습니다..
횡설수설.. 질문을 제대로 했는지 모르겠네요 질문이 있으시면 댓글달아주시면 바로 대답해드리겠습니다
실시간으로 확인합니다 감사합니다.