public class CustomAdapter extends BaseAdapter
{
private static final String LOG = "CustomAdapter";
private LayoutInflater mInflater;
private ArrayList<dataST> mRowList;
private int resourceLayoutId;
private AsyncTask < Void , Void, Bitmap > aTask;
private static Context m_ctx;
public CustomAdapter(Context context, int textViewResourceId, ArrayList<dataST> rowList)
{
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
resourceLayoutId = textViewResourceId;
mRowList = rowList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
holder hold;
if(convertView == null)
{
convertView = mInflater.inflate(resourceLayoutId, parent, false);
hold = new holder();
hold.imagee = (ImageView)convertView.findViewById(R.id.imagee0);
hold.textt0 = (TextView)convertView.findViewById(R.id.textt0);
hold.textt1 = (TextView)convertView.findViewById(R.id.textt1);
hold.textt2 = (TextView)convertView.findViewById(R.id.textt2);
hold.textt3 = (TextView)convertView.findViewById(R.id.textt3);
hold.editt0 = (EditText)convertView.findViewById(R.id.editt0);
hold.editt1 = (EditText)convertView.findViewById(R.id.editt1);
hold.editt2 = (EditText)convertView.findViewById(R.id.editt2);
hold.editt3 = (EditText)convertView.findViewById(R.id.editt3);
hold.editt4 = (EditText)convertView.findViewById(R.id.editt4);
convertView.setTag(hold);
}else {
hold = (holder)convertView.getTag();
}
/* TextView tvTextLabel = (TextView) convertView.findViewById(R.id.textLabel);
tvTextLabel.setText(mRowList.get(position));*/
hold.position = position;
aTask = new asyncTask(position , hold , m_ctx);
aTask.execute();
return convertView;
}
private class asyncTask extends AsyncTask<Void , Void, Bitmap >{
int mPosi;
holder mhold;
dataST datast;
public asyncTask(int position, holder hold, Context context){
mPosi = position;
mhold = hold;
Log.i("astncTask", "생성자");
}
protected void onPreExecute(){
super.onPreExecute();
datast = mRowList.get(mPosi);
Log.i("astncTask", "onPreExecute");
}
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bm = null;
String imPath = datast.imgurl;
bm = urlToBitmap(imPath);
Log.i("astncTask", imPath);
Log.i("astncTask", "dolnBackground");
return bm;
}
protected void onPostExecute(Bitmap bm){
if(mhold.position == mPosi){
if(bm != null){
mhold.imagee.setImageBitmap(bm);
}else {
mhold.imagee.setImageDrawable(null);
}
mhold.editt0.setText(datast.height);
mhold.editt1.setText(datast.weight);
mhold.editt2.setText(datast.head);
mhold.editt3.setText(datast.memo);
// editt4.setText(new String(datast.imgurl));
mhold.editt4.setText(datast.date);
Log.i("astncTask", "onPostExecute");
}
}
}
private static class holder{
public ImageView imagee;
public TextView textt0, textt1, textt2, textt3 ;
public EditText editt0, editt1, editt2, editt3, editt4 ;
public int position;
}
public Bitmap urlToBitmap(String String) {
BitmapFactory.Options resize = new BitmapFactory.Options();
resize.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(String, resize);
return bitmap;
}
@Override
public int getCount()
{
return mRowList.size();
}
@Override
public Object getItem(int position)
{
return mRowList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
}
어댑터 부분 전체 코딩입니다. 자료는 SQLite 에 저장되어 있는 정보를 이용하구요.
사진 부분은 SQLite 에 폰 갤러리 경로를 저장하고 그 경로를 가지고 리사이즈후 셋팅하는 구조입니다.
AsyncTask를 사용하지 않았을시에 심한 버벅임 문제가 있어서 AsyncTask를 사용하는 쪽으로 코드를 바꾸었습니다.
이후엔 버벅임 현상은 사라졌지만 스크롤시 사진이 스크롤전의 사진이 보였다가 정상 사진으로 셋팅되는 문제가 있습니다...
스크롤을 빠르게 할 수록 더 심해졌습니다...
원본사진을 이미지뷰에 셋팅시에 리사이징 후 셋팅 하기때문에 이런 문제가 발생하는 건가요..?
처음 로딩시 이미지뷰에 셋팅을 하고 스크롤시에도 다시 셋팅하지 않고 그대로 두는 방법이 있을까요....
도와주세요....ㅜ