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

커스텀 뷰에 이미지 넣는법

0 추천
protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        ListView list = findViewById(R.id.listview1);

        helper = new DBHelper(this);
        db = helper.getWritableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM contacts",null);

        startManagingCursor(c);

        String[] from ={"title","rating","genre","year"};

        int [] to={R.id.title,R.id.rating,R.id.genre,R.id.year};

        final SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                this,R.layout.listitem1,c,from,to);

        list.setAdapter(adapter);

심플커서어댑터를 이용해서 db랑 연동후 커스텀뷰에 값을 넣는것 까지는 했는데

이미지를 어떻게 넣어야 하는지 모르겠습니다

DB랑 관계없이 어떻게든 이미지를 넣기만 하면 됩니다

답변 부탁드립니다!!

누누킹 (160 포인트) 님이 2021년 11월 6일 질문
누누킹님이 2021년 11월 6일 수정

1개의 답변

+1 추천
 
채택된 답변

DB에서 CursorAapdater를 통해 이미지를 가져올 수 있는 경우가 아니라면, 별도로 어댑터를 만드셔야 합니다.  레이아웃에 RecyclerView 갖다놓고 Recycler.Adapter를 구현하시면 됩니다. Recycler.Adapter에 화면에 보여지길 원하는 아이템을 List로 만드신 다음 이걸 Recycler.Adapter 전달해 주시면 됩니다.  RecyclerView에 대한 튜토리얼은 너무 넘쳐나서 코드를 반복하지는 않겠습니다.

https://developer.android.com/guide/topics/ui/layout/recyclerview?gclid=CjwKCAjwz5iMBhAEEiwAMEAwGPE0RF9kHaJEVNFBXeoSPWd_qzgjkxlmWZSaHO9mU0BrGTxCPY7uphoCj4wQAvD_BwE&gclsrc=aw.ds

위의 링크에 보시면 개발자 문서에 자세한 안내가 나와있고, 페이지 하단에 샘플 코드 링크가 있습니다. (한글 번역판도 있는 것으로 압니다.)

구글에서 Android RecyclerView로 검색하시면 아주 많은 검색결과가 나올 겁니다. 적당한 걸 골라서 확인해 보세요.

 참고로 님의 경우는  db 에서 데이터를 가져와서 images와 함께 데이터를 조합해서 만드셔야 합니다. 어떻게 데이터 변환을 하는지 간단한 예제를 올릴게요. (이미지를 올리셔서 코드 카피가 안되네요.)

 

//Movie.java
// 필드 타입을 알 수 없어서 그냥  int로 함.
public class Movie {
     pirvate final int id;
     private final String title;
     private final Int rating;
     private final String genre;
     private final String year;
     @DrawableRes private final int imageId;

     //  Constructor, getters, setters 생략
}

// MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) [
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

     helper = new DBHelper(this);
     db = helper.getWritableDatase();
     Cursor c = db.query(...);

     // 여기서부터 DB데이터를 RecyclerView에 사용할 수 있도록 변환하는 코드
     List<Movie> movies = new ArrayList<>();
     if (c.moveToFirst()) {
          do {
               int id = c.getInt(1);
               String title = c.getString(2);
               int rating = c.getInt(3);
               Stirng genre = c.getString(4);
               String year = c.getString(5);

               // DB에 들어있는 영화 정보에 맞는 이미지의 리소스 ID를 가져옴. 여기에 대한 규칙은 님만 알고 있어요.
               int imageId = getMovieImageId(...); 

               Moview movie = new Movie(id, title, rating, genre, year, imageId);
               movies.add(movie);
          } while(cr.moveToNext());
     }

     // 여기에서 공부하실  RecyclerView에 대한 지식을 가지고 RecyclerView.Adapter에 movies를 전달해주면 됩니다.
}

// 님만이 이미지 리소스와 DB에 들어있는 영화정보에 대한 매핑을 할 수 있기 때문에 파라미터들과 내부 로직은 비워둡니다.
// 현재로썬 이 부분에 대해서는 제가 도와드릴 수 있는 정보가 없어요.
private int getMovieImageId() {
   // 구현필요.
}

}

 

spark (224,800 포인트) 님이 2021년 11월 6일 답변
spark님이 2021년 11월 7일 수정
이유는 모르겠는데 DBHelper 클래스에서 이미지들을 integer array배열로 저장하고나서 sql 로 insert후 메인액티비티에서
 String[] from ={"image","title","rating","genre","year"};
  int [] to={R.id.image1,R.id.title,R.id.rating,R.id.genre,R.id.year};
로 수정해주니까 이미지가 정상적으로 나오네요 ㄷㄷ
제가 아직 엄청 초보라 답변을 이해 못했지만
답변 정말 감사합니다!
잘 됐네요. 혹 DB에 있는 ID가 이미지의 리소스 ID인가요? 혹 그렇다면 테이블 구조를 잘못 설계하신 듯 합니다.
...