마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

db에서 이미지 리소스 아이디 받아서 커스텀 리스트뷰에 이미지 출력하기

0 추천
커스텀 리스트뷰에 이미지뷰와 텍스트뷰를 포함하여 구현하려고 합니다.

sqlite에 입력한 값을 넘겨 받아서 텍스트뷰는 문제없이 출력을 하였는데

이미지를 넘겨 받지 못하고 있습니다.

public class DBAdapter extends CursorAdapter {

public DBAdapter (Context context, Cursor c) {
super(context, c);
}
public void bindView(View view, Context context, Cursor cursor) {
final ImageView img = (ImageView)view.findViewById(R.id.img);
final TextView name = (TextView)view.findViewById(R.id.name);
final TextView price = (TextView)view.findViewById(R.id.price);

img.setImageResource(R.drawable.img2);
name.setText("품명 : " + cursor.getString(cursor.getColumnIndex("name")));
price.setText("값 : " + cursor.getString(cursor.getColumnIndex("price")));
}

일단 고정 파일명을 입력해봤지만 xml에서 src로 지정하지 않으면 아예 뜨지 않습니다.
뜨게 된다고 해도 제가 하려고 하는 부분은 db에 저장된 img리소스 아이디를 변수로 지정하여 넣는 부분입니다.
다음 코드는 이미지 리소스 아이디를 변수명으로 바꿔서 입력하는 부분을 시도해 본것입니다.
Class<R.drawable> drawable = R.drawable.class;
try {
Field field = null;
String tmp = cursor.getString(cursor.getColumnIndex("img"));
String var=null;
int m=1;
while(var==tmp){
var="img"+m;
m++;
String res = var;
}
field = drawable.getField(var);
int r;
r = field.getInt(null);
img.setImageResource(r);
}catch (Exception e){}
낙지쟁반짜장 (120 포인트) 님이 2016년 8월 5일 질문

2개의 답변

0 추천
이미지 리소스 ID라는게 R.drawable.??? 를 말하시는 건가요?

그렇다면 매우 잘못된 방법을 사용하고 계십니다.

리소스 ID는 DB에 저장했다가 사용하면 안됩니다.
익명사용자 님이 2016년 8월 5일 답변
말씀하신 부분중 ???부분에 들어갈 파일명을 변수를 통해서 넣을려고 한건데 안되나요? 구글링으로 찾아보면 아이템리스트로 아이템마다 직접입력해서 추가시키는 방법만 나오던데 그렇게 되면 아이템이 많아질수록 코드가 길어지지 않나요?
다른 방법이 있다면 키워드정도만이라도 알려주시면 검색해보겠습니다. 감사합
니다
참고한사이트입니다
http://m.blog.naver.com/sohyoun74/90179026875
http://recipes4dev.tistory.com/43
0 추천

이미지 resource id값을 db에 저장하고 가져올려고 하시는거죠?

 

img.setImageResource(R.drawable.img2);

이부분에서 R.drawable.img2를 db에서 어떻게 가져오는지 안적어주셧는데,

cursor.getInt(cursor.getColumnIndex("필드명"))으로 가져오시면 R파일의 id값이 변하지 않는다는

가정하에는 동작할거 같습니다.

 

정확하지는 않으나, 빌드를 새로하게되면 R에등록된 id가 실제적으로 참조하는값이 

변할수 있어서, db가 업데이트되어서  db에저장되어있는 이미지 리소스를 가르키는 id값이 새로 빌드된 R파일의 리소스값과 일치하지않는다면, 이미지를 못가져올듯 합니다.

기존db를 체크해서 새로운 리소스id값으로 변경할 수 있겠지만, 엄청 번거로운 일같네용;

 

그렇게 하시기보다는, 이미지종류 -> INT값을 맷칭시켜서 class로 만들어서,

db에 INT값 을저장하시고 adapter에서 <INT값, 이미지리소스ID>를 키밸류로 같는 해쉬맵을 만들어서

맷칭시켜주면 좋을듯합니다.

 

sukury47@gmail.com 님이 2016년 8월 6일 답변
감사합니다 참고해서 진행해보겠습니다.
...