질문의 연속이네요..; 산넘어 산..ㅠ_ㅠ
질문에 앞서 리스트의 구조는 위의 그림처럼 이름, 지역, 시즌 그리고 젤 왼쪽 공간에 이미지가 들어가는 구조입니다.
이번에 생긴 문제는 DB의 이미지에 대한 정보 저장방식을 리소스 ID값을 저장하는 방식에서
해당 이미지의 파일 이름으로 저장하는 방식으로 바뀌면서 생겼습니다.
원래(바꾸기전)의 디비에는 해당하는 이미지의 리소스ID값이 저장되어있어서
SimpleCursorAdapter 를 용하여 뿌려주면 해당 이미지도 같이 불러와서 리스트에 뿌려줬었는데요..
어제도 궁금한게 있어서 질문을 하다가 시루떡님께서 리소스 ID는 빌드시 바뀔 가능성이 있다고 하셔서
DB에 이미지 저장 방식을 리소스 ID에서 파일 이름만 저장하는 형태로 바꿨습니다.
어제 시루떡님이 알려주신 파일명을 가지고 리소스 ID를 알아내는 방법을 사용하려구요..
context.getResources().getIdentifier(파일명(확장자미포함)), "drawable", context.getPackageName())
이렇게 변경한후..;; 컴파일을 해봤더니..역시나 젤 위의 사진처럼 이미지가 없이 다른 정보만 표시된 형태로
리스트가 뿌려지더군요...
그래서 생긴 궁금증입니다... 예전에 쓰던 방식(리소스 ID를 DB에 저장하는)은 시루떡님께서 말씀하셧듯이
리소스 ID가 변경될 가능성을 포함하고 있기때문에 사용하지 않을려고 합니다.
하지만 전에 사용하던 방식을 쓰지 않았을경우..; 젤 위의 사진처럼.. 이미지를 생성할수 밖에 없네요..ㅠ_ㅠ
보통 DB의 이미지 정보와 텍스트 정보를 같이 리스트로 뿌려줄때 어떤 방식을 사용하시나요??
그냥 SimpleCursorAdapter를 사용하면되는간가요???
역시.. 프로그램은 하면 할수록 어렵게 느껴지네요..ㅜ_ㅜ
mAdapter = new SimpleCursorAdapter(SeaLureGuide_FishList.this, R.layout.fish_list_row, cursor,
new String[] {COLUMN_IMG, COLUMN_NAME, COLUMN_LOCATION, COLUMN_SEASON, COLUMN_NUM},
new int[] {R.id.Img_fish_list, R.id.Txt_fish_list_name, R.id.Txt_fish_list_location, R.id.Txt_fish_list_season});
FishList.setAdapter(mAdapter);



simpleCursorAdapter 는 써본적이 없어서, 가능한지는 모르겠지만, 힘들거 같구요, baseAdapter 상속받으셔서 구현하시면 되고, getView 메소드를 오버라이드 하셔서, view 에 직접 이미지를 뿌려주셔야 합니다. 제 코드중에 비슷한 경우에 쓴 코드 올려드립니다.
class BeanAdapter extends BaseAdapter
{
ArrayList<CoffeeBean> beans;
public BeanAdapter(ArrayList<CoffeeBean> shops)
{
this.beans = shops;
}
public void setShops(ArrayList<CoffeeBean> shops)
{
this.beans = shops;
}
@Override
public int getCount()
{
if (beans.size() == 0)
return 1;
else
return beans.size();
}
@Override
public CoffeeBean getItem(int position)
{
if (beans.size() == 0)
return null;
else
return beans.get(position);
}
@Override
public long getItemId(int position)
{
if (beans.size() == 0)
return -1;
else
return beans.get(position).getIdx();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v;
if (convertView == null)
{
v = View.inflate(BeanList.this, R.layout.shop_list_item, null);
CoffeeBeanHolder holder = new CoffeeBeanHolder(v);
v.setTag(holder);
}
else
v = convertView;
CoffeeBeanHolder holder = (CoffeeBeanHolder) v.getTag();
if (beans.size() > 0)
{
CoffeeBean bean = beans.get(position);
holder.getShopname().setText(bean.getNations());
holder.getShoplocation().setVisibility(View.VISIBLE);
holder.getShoplocation().setText(bean.getBeans());
int imgresource = getResources().getIdentifier(bean.getFlags().substring(0, bean.getFlags().lastIndexOf(".")), "drawable", getPackageName());
holder.getShopicon().setImageResource(imgresource);
}
else
{
holder.getShopname().setText("등록된 원두정보가 없습니다.");
holder.getShoplocation().setVisibility(View.GONE);
}
return v;
}
}