공부한 강의
www.youtube.com/watch?v=ao0Iqfhy0oo&list=PLC51MBz7PMywN2GJ53aF0UO5fnHGjW35a&index=5
1. 간단하지만 제약이 있는 1번방법 (알아만두자)
배열내용은,, 최근 본 웹툰인물들 이름..
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
val item = arrayOf("정황지","위성연","미은","김사능")
//context : 한 엑티비티의 모든 정보를 담고있음.
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, item)
}
2. 쓸만하지만 복잡한 2번방법
: 리스트뷰를 xml 파일에 만든다
: 코틀린파일(.kt) 생성
//클래스 모델 객체
class Content (val 변수1: Int, val 변수2: String)
리스트 항목 크기 조정
ConstraintLayout 클릭 - Layout - Layout_width, Layout_height 항목 조정
코드를 연결하는 개념이라고 생각하자
리스트뷰는 어뎁터 연결을 꼭해야하고 아래 함수들을 호출한다 (계속)!
: 코틀린파일(.kt) 생성
class ContentAdapter (val context: Context, val ContentList : ArrayList<Content/*모델명*/>) : BaseAdapter() {
}
ContentAdapter 은 어뎁터의 이름
ContentList 는 배열이름
<>안의 Content 는 모델이름
** 중요 : 이때 나오는 오류에 대해 안드로이드 스튜디오가 제안하는 모든 해결책을 수행하면 (option + enter) 아래의 코드가 자동으로 클래스 안에 만들어진다.
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
}
override fun getItem(position: Int): Any {
}
override fun getItemId(position: Int): Long {
}
override fun getCount(): Int {
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
// getView : "position" (인덱스처럼 0부터시작) 값을 가지고 있는 변수들을 만든다.
val view: View = LayoutInflater.from(context).inflate(R.layout.리스트이름, null)
// 리소스.레이아웃."xml파일"로부터 뷰를 붙이는 과정
// R.layout.리스트이름 : 리소스폴더(res) - 레이아웃폴더(layout) - "리스트이름"이라는 이름의 리스트
val 변수1 = view.findViewById<TextView>(R.id."텍스트뷰아이디")
val 변수2 = view.findViewById<TextView>(R.id."텍스트뷰아이디")
// "변수" 는 "뷰아이디" 로부터 뷰를 찾아라
// <>안에는 형태 ex.TextView, ImageView...
val content = ContentList[position]
// val 변수이름 = 배열이름[position]
// 배열의 'position+1' 번째 항목
변수1.text = content.변수1
변수2.text = content.변수2
//변수.text 는 content모델에서 끌어오는 변수
return view
}
val 변수 = view.findViewById<ImageView>(R.id."이미지뷰아이디")
이미지.setImageResource(content.이미지)
override fun getItem(position: Int): Any {
return ContentList[position]
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getCount(): Int {
return ContentList.size
}
: 뷰리스트가 포함된 .xml 에 포함된 코틀린파일(.kt)에 다음과 같은 코드 작성
//리스트 만들기
var ContentList = arrayListOf<모델클래스이름>(
모델클래스이름 (R.drawable.이미지, "위성연", "불"), //콤마 빼먹지말기
모델클래스이름(R.drawable.이미지, "미은", "납"), //변수 순서 맞추기 주의
모델클래스이름(R.drawable.이미지, "정황지", "다재다능") //콤마 안붙임 주의
)
여기서 command + click 으로 모델클래스이름 클릭하면 모델클래스로 넘어간다 -> 잘연결됨
: override fun onCreate 함수 안에서 활용 !
val Adapter = 어뎁터클래스이름(this, ContentList)
//여기서 어뎁터쪽으로 쏘면 어뎁터 클래스에서 val ContentList 쪽으로 받아서 등록되는 원리
listView.adapter = Adapter
//어뎁터 실행
여기서는 토스트팝업뜨는 것만 구현함
리스트뷰이름.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
//특정 리스트 클릭 시 실행
val selection = parent.getItemAtPosition(position) as Content
//클릭한 포지션을 가진 변수가 만들어짐
Toast.makeText(this, "${selection.변수1}", Toast.LENGTH_SHORT).show()
//토스트 팝업으로 클릭한 리스트의 변수값이 뿅하고 나옴
}