Kotlin 앱만들기 study #3 - ListView

Avocado·2020년 10월 22일
0

홍드로이드님 코틀린 앱 강의 (https://youtu.be/ao0Iqfhy0oo) 필기.

layout

Constraint Widget 0/0/0/0
layout_width(height) match_parent -> 0dp로 변경

adapter

ListView는 어댑터를 사용해야 연결 가능(?)

val item = arrayOf("사과", "배", "포도", "키위", "바나나")
//context는 액티비티의 모든 정보를 담고있다.
listView.adapter = ArrayAdapter(context:this, android.R.layout.simple_list_item_1, item)

모델객체 만들기

MainActivity 파일 밑에 User 새 코틀린 파일 만들어주기

// 클래스 모델 객체
class User (val profile:Int, val name:String, val age:String, val greet: String)

res > layout 에 새로운 레이아웃 리소스 파일 만들어주기

(list_item_user.xml)
ConstraintLayout 사이즈를 조정하여 1개 리스트의 사이즈 지정
match_parent -> wrap_content

뭔가 궁금할경우 Ctrl + Click

에러 내용이 궁금할경우 Alt + Enter

Adapter 만들기

MainActivity와 같은 폴더에 UserAdapter.kt 생성

// 첫줄 완성 후 Alt+Enter 클릭 후 BaseAdapter 전체 선택(Ctrl+A) 해서 implement.
class UserAdapter (val context: Context, val UserList: ArrayList<User>) : BaseAdapter() 
{
	ovverride fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    	//뷰를 붙일때 LayoutInflater를 씀
    	val view: View = LayoutInflater.from(context),inflate(R.layout.list_item_user, null)
        val profile = view.findViewById<ImageView>(R.id.iv_profile)
        val name = view.findViewById<TextView>(R.id.tv_name)
        val age = view.findViewById<TextView>(R.id.tv_age)
        val greet = view.findViewById<TextView>(R.id.tv_greet)
        
        val user = UserList[position]
        
        profile.setImageResource(user.profile)
        name.text = user.name
        age.text = user.age
        greet.text = user.greet
        
        return view
    }
    
    override fun getItem(position: Int): Any {
    	// array list에 있는 위치들 만큼 get item 한다?
    	return UserList[position]
    }
    
    override fun getItemId(position: Int): Long{
    	return 0 // 사용안함
    }
    
    override fun getCount(): Int{
    	// getCount를 호출하면 아이템 갯수가 나옴
        return UserList.size
    }
}

리스트뷰에는 반드시 어댑터로 연결을 해 주어야 한다.
어댑터가 연결이 되었을때 getView가 호출되어 뷰를 만듬

MainActivity와 Adpater 연결해주기

MainActivity.kt

//클래스 선언 밑에 작성
var UserList = arrayListOf<User>(
	// 콜론 앞은 자동완성됨
	User(R.drawable.android, name:"아보카도", age:"28", greet: "안녕"),
    User(R.drawable.android, name:"과자", age:"28", greet: "바삭"),
    User(R.drawable.android, name:"과카몰리", age:"28", greet: "맛있어")
)

//onCreate 안에 작성
val Adapter = UserAdapter(context: this, UserList)
listView.adapter = Adapter

//listView 클릭이벤트 (OnItemClickListner 두번째꺼)
listView.onItemClickListner = AdapterView.OnItemClickListner { parent, view, position, id ->
	// as User 로 모델 형태 선언해주기
	val selectItem = parent.getItemAtPosition(position) as User
    Toast.makeText(context:this, selectItem.name, Toast.LENGTH_SHORT).show()
    
}
profile
후숙은 타이밍

0개의 댓글