저번에 NewsData들을 Log찍어봤을때 잘 들어오는것을 확인했다
이제 이 데이터를 NewsAdapater에서 화면에 보여주는 기능을 만들거다
public NewsViewHolder(View v){
super(v);
// Activity가 아니라 부모로 정한 Linerlayout v 라고 정의한 v에서 findViewById로 값을 가져와야 함
textView_title = v.findViewById(R.id.textView_title);
textView_content = v.findViewById(R.id.textView_content);
imageView_title = v.findViewById(R.id.imageView_title);
}
Holder에 들어있는 위의 세가지 값을 데이터를 세팅하는 onBindViewHolder에서 세팅하겠다
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder, int position) {
//holder.textView_title.setText(newsDataset[position]);
}
Adapter의 onBindViewHolder 함수는 원본의 크기만큼 반복한다
매개변수 position - 리사이클러뷰의 항목 ○번째 = 데이터의 ○번째
position이 있어서 List형태의 newsDataset.get을 통해 특정 순번의 데이터를 가져올 수 있다.
holder.textView_title.setText(newsDataset.get(position).getTitle());
하나정도 데이터를 가져올거면 이렇게 해도 되지만
NewsData news = newsDataset.get(position);
holder.textView_title.setText(news.getTitle());
holder.textView_content.setText(news.getContent());
먼저 position번째의 데이터를 news라는 이름으로 정의하고 그 news에서 필요한 데이터를 가져오게해도 좋다
Image는 저번에 dependencies에 추가한 Fresco를 이용해 불러올건데
기존에 안드로이드에 있는 ImageView가아닌 SimpleDraweeView를 사용하면 된다
public NewsAdapter(List<NewsData> myDataset){
newsDataset = myDataset;
Fresco.initialize(this);
}
어댑터 첫 함수에 Fresco를 초기화한다
이때, this에서 context 오류가 나는데 Adapter에서는 context를 쓸 수 없기때문에!!!!!!!
adapter = new NewsAdapter(news, NewsActivity.this);
Activity로 가서 adpater선언한 코드를 다음과 같이 수정해주고
public NewsAdapter(List<NewsData> myDataset, Context context){
newsDataset = myDataset;
Fresco.initialize(context);
}
Adapter에서 이렇게 context를 사용하면된다 ( 간단하지만 나중에 누수가 생길수있어 이 방법은 권장 x )
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imageView_title"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
xml파일로 가서 기존의 ImageView를 SimpleDraweeView로 바꾸고
Uri uri = Uri.parse(news.getUrlToImage());
holder.imageView_title.setImageURI(uri);
이미지 로딩 코드를 Adapter의 onBindViewHolder에 넣는다
( 기존의 전역변수와 NewsViewHolder에 정의한 imageView를 수정해야한다 )
@Override
public int getItemCount() {
return newsDataset == null ? 0 : newsDataset.size();
}
getItemCount는 null일때 오류가 발생할 수 있어서 삼항연산자로 작성했다
null이 아닐경우 newsDataset의 size만큼된다!!
'Android' 카테고리의 다른 글
[Android /Java] setOnNavigationItemSelectedListener depercated (0) | 2022.01.20 |
---|---|
[Android/Java] Adapter에서 클릭이벤트, 태그달기 (0) | 2022.01.15 |
[Android/Java] Volley + JsonAPI사용 (0) | 2022.01.11 |
[Android/Java] CardView, Json 사용하기 (0) | 2022.01.07 |
[Android/Java] RecyclerView & Adapter 사용 (0) | 2022.01.04 |