어댑터 뷰를 새롭게 만들어서 ㅋㅌ을 흉내내보려한다
레이아웃을 살펴보면 크게 세개로 나뉘어있고 각 이미지, 텍스트뷰2, 노래텍스트1로 구성됨
뷰는 이런식으로 지정되어있음..
빈 xml을 만들어 리스트뷰를 만들어주고
프사로 해줄 이미지 5개 넣음
package com.example.ex220513;
import android.graphics.drawable.Drawable;
public class KakaoVO {
private Drawable img;
private String name;
private String message;
private String music;
public KakaoVO(){}
public KakaoVO(Drawable img, String name, String message, String music) {
this.img = img;
this.name = name;
this.message = message;
this.music = music;
}
@Override
public String toString() {
return "KakaoVO{" +
"img=" + img +
", name='" + name + '\'' +
", message='" + message + '\'' +
", music='" + music + '\'' +
'}';
}
public Drawable getImg() {
return img;
}
public void setImg(Drawable img) {
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getMusic() {
return music;
}
public void setMusic(String music) {
this.music = music;
}
}
extends 하게 되면 빨간줄 오류가 나오는데, alt enter로 확인하거나 마우스 가져다대면 아래같이 오버라이딩 하라고 뜸
오버라이딩ㅇㅋ 해줌
vo를 담을 ArrayList를 필드 선언
java파일에서 사용할 메소드 addItem(Drawable img, String name, String message, String music) 생성
vo타입 객체 만들고, 인자로 img, name, message,music 넣어줌
vo를 ArrayList items에 add 해줌
오버라이딩 getCount() : 어댑터가 가지고 있는 아이템의 개수를 알려주는 메소드
getItem(int i) : 어댑터에게 해당 i 번째의 아이템을 요청하는 메소드 (선택한 아이템)
return items.get(i);
: 리턴 Object: 업캐스팅 - 형변환됨
getItemId(int i) : 안중요함 안씀, 그냥 i 리턴
return i;
getView(int i, View view, ViewGroup viewGroup) : Adapter가 가지고 있는 item만큼 만들어놓은xml틀에 맞게 넣어주는 메소드, 필수 구현!
만들어놓은 xml 불러오기 -> 불러와서 위에 구현해놓은 item 넣어줘야됨
Context context = viewGroup.getContext();
return view;
: 리스트뷰에 들어간 모든 정보인 view 반환
package com.example.ex220513;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
// VO담을 어댑터 생성 BaseAdapter 상속
public class KakaoAdapter extends BaseAdapter {
private ArrayList<KakaoVO> items = new ArrayList<KakaoVO>();
// VO가져와서 ArrayList 담아줌
public void addItem(Drawable img, String name, String message, String music){
KakaoVO vo = new KakaoVO(img,name,message,music);
items.add(vo);
}
@Override
public int getCount() {
//어댑터가 가지고 있는 아이템의 개수를 알려주는 메소드
return items.size();
}
@Override
public Object getItem(int i) {
// 어댑터에게 해당 i 번째의 아이템을 요청하는 메소드 (선택한 아이템)
return items.get(i); // 리턴 Object: 업캐스팅 - 형변환됨
}
@Override
public long getItemId(int i) { // 안중요함 안씀, 그냥 i 리턴
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//Adapter가 가지고 있는 item만큼 만들어놓은xml틀에 맞게 넣어주는 메소드, 필수 구현!
// 만들어놓은 xml 불러오기 -> 불러와서 위에 구현해놓은 item 넣어줘야됨
Context context = viewGroup.getContext();
if(view == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//레이아웃이 정의 안되어있기 때문에
view = inflater.inflate(R.layout.kakao,viewGroup,false);
}
ImageView img = view.findViewById(R.id.img);
TextView tv_name = view.findViewById(R.id.tv_name);
TextView tv_message = view.findViewById(R.id.tv_message);
TextView tv_music = view.findViewById(R.id.tv_music);
KakaoVO vo = items.get(i); //아이템즈는 i에 담김
img.setImageDrawable(vo.getImg());
tv_name.setText(vo.getName());
tv_message.setText(vo.getMessage());
tv_music.setText(vo.getMusic());
return view; //리스트뷰에 들어간 모든 정보
}
}
만들어놓은 어댑터 호출하고,
실행시 나오는 화면에 어댑터 통해 리스트뷰 불러옴
클릭시 토스트메시지 나오게하기 -> setOnItemClickListener 익명클래스
package com.example.ex220513;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity2 extends AppCompatActivity {
private ListView listView;
private KakaoAdapter adapter = new KakaoAdapter();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
listView = findViewById(R.id.kakaoListView);
adapter.addItem(ContextCompat.getDrawable(this,R.drawable.img1),"육전",
"육전입니다","TomBoy-(G)-IDLE ▶");
adapter.addItem(ContextCompat.getDrawable(this,R.drawable.img2),"육회1",
"육회입니다","LOVE DIVE-ive ▶");
adapter.addItem(ContextCompat.getDrawable(this,R.drawable.img3),"육회2",
"육회입니다2","HelloFuture-nct dream ▶");
adapter.addItem(ContextCompat.getDrawable(this,R.drawable.img4),"마라탕",
"마라탕입니다","Ready to love-세븐틴 ▶");
adapter.addItem(ContextCompat.getDrawable(this,R.drawable.img5),"차돌박이",
"바삭바삭","버퍼링-nct dream ▶");
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
KakaoVO vo = (KakaoVO) adapterView.getItemAtPosition(i);
Toast.makeText(getApplicationContext(), vo.toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
완성화면: