ListView에서는 여러 List를 쭉~ 보여줘야하는데 하나의 리스트에 있는 여러 Component 들을 Adapter를 통해 하나로 감싸고, 그 리스트를 어떤 View에 넣어 보여줘야 하는지를 정하는 가교 역할을 한다. 음.. 이걸로 이해가 되나??
클래스 첫번째 param으로 Context, 두번째 param으로 User 객체를 담은 ArrayList Type을 받는다.
상속 : BaseAdapter() 를 상속받고 이에 따라 기본적으로 4개의 함수를 implement 해야한다.
getView(Int, View ViewGroup) : list_item_usr.xml의 view와 데이터 간의 연동이 이루어지는 가장 중요한 메소드
getItem(Int) : 해당 위치의 Item을 반환하는 메소드
getItemId(Int) : 해당 위치의 Item id를 반환하는 메소드
getCount() : ListView의 전체 크기(리스트의 전체 갯수)를 반환하는 메소드
class UserAdapter (val context:Context, val UserList:ArrayList<User>):BaseAdapter()
{
private var mBinding: ListItemUserBinding? = null
private val binding get() = mBinding!!
override fun getView(position: Int, covertView: View?, parent: ViewGroup?): View {
mBinding = ListItemUserBinding.inflate(LayoutInflater.from(context))
val profile = binding.ivProfile
val name = binding.tvName
val age = binding.tvAge
val greet = binding.tvGreet
val user = UserList[position]
profile.setImageResource(user.profile)
name.text = user.name
age.text = user.age
greet.text = user.greet
return mBinding!!.root
}
override fun getItem(position: Int): Any {
return UserList[position]
}
override fun getCount(): Int {
return UserList.size
}
override fun getItemId(position: Int): Long {
return 0
}
}
7. MainActivity.kt
UserList 생성 : 만들어 둔 User class의 형태로 객체를 만들어 arrayListOf에 담아 기본 데이터로 설정.
Adapter 생성 : 상속받아 만들어 둔 Custom Adapter (UserAdapter) 생성 -> ListView의 Adapter로 설정.
ListView onItemClickListener : 각 List를 클릭 했을때의 이벤트 처리로 Toast 메세지 show()
class MainActivity : AppCompatActivity() {
private var mBinding:ActivityMainBinding? = null
private val binding get() = mBinding!!
var UserList = arrayListOf<User>(
User(R.drawable.android_basic, "겨울시인1", "40", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인2", "39", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인3", "38", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인4", "37", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인5", "36", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인6", "35", "안녕하세요"),
User(R.drawable.android_basic, "겨울시인7", "34", "안녕하세요")
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val Adapter = UserAdapter(this, UserList)
binding.listView.adapter = Adapter
binding.listView.onItemClickListener = AdapterView.OnItemClickListener {
parent,
view,
position,
id -> val selectItem = parent.getItemAtPosition(position) as User
Toast.makeText(this, selectItem.name, Toast.LENGTH_SHORT).show()
}
}
}
8. 실행결과
UserList의 데이터를 활용한 ListView 가 잘 보여지고 각 List를 클릭 했을때 User name 이 Toast 메세지로 보여진다.