안드로이드 개발 질문/답변
(글 수 45,052)
커스텀 리스트뷰+이미지뷰(URL) 공부중입니다.
DB에서 받아온 URL 주소로 이미지를 출력하고 싶은데요
list.add() 2줄있는데 아랫줄처럼 웹뷰 말고 이미지뷰로 구현 할수 있는 방법이 있을까요? 조언 부탁드립니다
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 타이틀없음 setContentView(R.layout.gallerylist);
// /////// 타이틀 이름 체인지할 변수 //////////// menutitle = getIntent().getStringExtra("menutitle");
glist = (ListView) findViewById(R.id.listView1); // <리스트뷰 선언 mapbt = (Button) findViewById(R.id.mapbt); // 맵버튼 homebt = (Button) findViewById(R.id.homebt); // 홈버튼 backbt = (Button) findViewById(R.id.backbt); // 홈버튼 tv = (TextView) findViewById(R.id.title); // 전시관1,2 testwv = (WebView) findViewById(R.id.img); mapbt.setOnClickListener(this); homebt.setOnClickListener(this); backbt.setOnClickListener(this); photo = (ImageView) findViewById(R.id.img); tv.setText(menutitle); // 전시관 이름 바꾸기 (1,2)
if (menutitle.equals("전시관1")) { // 전시관1로 들어왔을시 mcategory = 4
museumcode = "A0300";
} else if (menutitle.equals("전시관2")) { // 전시관2로 들어왔을시 mcategory = 5 museumcode = "A0300"; }
mdDatabase = openOrCreateDatabase("sema.data", // DB오픈 SQLiteDatabase.CREATE_IF_NECESSARY, null); String sql = "SELECT EXHIBIT_TITLE, WRITER_NAME_KOR, WRITER_NAME_ENG, EXHIBIT_AGE, EXHIBIT_MATERIAL FROM TB_EXHIBIT where MUSEUM_CODE_1='" + museumcode + "'"; Cursor c = mdDatabase.rawQuery(sql, null); c.moveToFirst(); String row0 = ""; String row1 = ""; String row2 = ""; String row3 = ""; String row4 = ""; while (!c.isAfterLast()) {
row0 = c.getString(0).toString(); // 작품명 row1 = c.getString(1).toString(); // 이미지 URL 주소 row2 = c.getString(2).toString(); // 작가이름 영어 row3 = c.getString(3).toString(); // 제작년도 row4 = c.getString(4).toString(); // 재질 System.out.println("row1=" + row1); System.out.println("row2=" + row2); list.add(new GalleryL(R.drawable.icon02, row0, row4)); // 리스트 list.add(new GalleryL(row1, row2, row4)); // 리스트 c.moveToNext(); }
MyCustomAdapter adapter = new MyCustomAdapter(getApplicationContext(), R.layout.gallery_list, list); // < 갤러리리스트 XML과 GalleryL 형식 리스트 adapter.notifyDataSetChanged();// 조합
glist.setAdapter(adapter); }); } // 온크리에이트
class MyCustomAdapter extends BaseAdapter { Context ctx; int layout; ArrayList<GalleryL> list; LayoutInflater inf;
public MyCustomAdapter(Context ctx, int layout, ArrayList<GalleryL> list) { this.ctx = ctx; this.layout = layout; this.list = list; inf = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() { // TODO Auto-generated method stub return list.size(); }
public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); }
public long getItemId(int position) { // TODO Auto-generated method stub return position; }
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub if (convertView == null) { convertView = inf.inflate(layout, null); } GalleryL gl = list.get(position);
TextView textv1 = (TextView) convertView.findViewById(R.id.tvup); TextView textv2 = (TextView) convertView.findViewById(R.id.tvdown); ImageView img = (ImageView) convertView.findViewById(R.id.img); textv1.setText(gl.getUptext()); // < 윗줄 텍스트 textv2.setText(gl.getDowntext()); // < 아랫줄 텍스트 img.setImageResource(gl.getImg()); return convertView; } }
class GalleryL { int img; String uptext; String downtext;
public GalleryL(int img, String uptext, String downtext) { // < 리스트뷰에 // 보여질 파라미터 super(); this.img = img; this.uptext = uptext; this.downtext = downtext; }
public int getImg() { // < 전시물 이미지 return img; }
public String getUptext() { // < 윗줄 텍스트 return uptext; }
public String getDowntext() { // < 아랫줄 텍스트 return downtext; } }
2013.01.30 17:33:13
아랫부분 한번 참고하세요.
getview에서 홀더를 선언하고
if (holder.imgView != null) {
new ImageAsync(holder.imgView).execute(여기에 url);
}
class ImageAsync extends AsyncTask<String, Integer, Bitmap> {
Bitmap bm;
ImageView mImg;
String image_url;
ImageAsync(ImageView img) {
mImg = img;
}
@Override
protected Bitmap doInBackground(String... params) {
image_url = params[0];
bm = ImageCashe.getImage(image_url);
if (bm == null) {
try {
URL url = new URL("image_url);
URLConnection connection = url.openConnection();
connection.connect();
InputStream is = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
}
ImageCashe.setImage(image_url, bm);
}
return bm;
}
@Override
protected void onPostExecute(Bitmap bm) {
if (image_url.equals("NoImage")) {
mImg.setImageResource(R.drawable.img_no);
} else {
mImg.setImageBitmap(bm);
}
}
}