반응형
💡 AdapterView
- 버튼이나 텍스트뷰 같이 그 자체로 사용이 가능한 뷰가 아닌 개발자가 view 를 구성하는 데이터를 정해줘야 구현이 가능
- 해당 데이터 정보를 Adapter Class 에 담아 사용
- 어댑터 클래스 객체 (데이터와 데이터를 어떻게 보여줄지 xml 을 담음) & 어댑터 뷰 (어댑터 객체를 셋팅 해줌)
Adapter Class
- 어댑터뷰에 달아줄 어댑터 객체를 생성
- 어떤 데이터를 보여줄 것인지 / 어떻게 데이터를 보여줄 것인지 등의 정보를 파라미터로 설정
- 첫번째 파라미터 : context
- 두번째 파라미터 : item 을 어떻게 보여줄지 구성한 layout id
- 세번째 파라미터 : 보여줄 데이터
val adapter1 = ArrayAdapter(this, android.R.layout.simple_list_item_1, data1)
mainBinding.listview1.adapter = adapter1 //어댑터뷰(리스트뷰)에 어댑터 세팅
ListView
- 데이터를 list 방식으로 연속적으로 보여줄 수 있는 adapterview 의 한 종류
- 메모리 사용에 효율적이지만 구현이 까다로운 Recyclerview 비해 구현이 간단해 간단한 아직도 많이 사용
ListView 주요 이벤트
- OnitemClickListener : listview의 항목을 터치했을 때 리스너 메소드를 상속 받아 구현
- onItemClick메소드를 반드시 오버라이딩
class MainActivity : AppCompatActivity() {
lateinit val mainBinding : MainActivityBinding;
val data1 = arrayof("문자열1","문자열2","문자열3","문자열4","문자열5") //리스트뷰에 넣을 데이터
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
mainBinding = ActivityMainBinding.inflate(layoutInflater);
setContentView(mainBinding.root)
// 어댑터 객체 생성
val adapter1 = ArrayAdapter(this, android.R.layout.simple_list_item_1, data1) // ArrayAdapter라는 Adapter 클래스
mainBinding.listview1.adapter = adapter1 //어댑터 셋팅
// 리스트뷰 item 클릭 리스너 설정
mainBinding.listview1.setOnitemClickListener(ListitemClickListener1()) // 상속 받아 만든 클래스로 객체 만들어 사용
/*
// 익명클래스로 구현함과 동시에 리스너에 달아 사용
mainBinding.listview1.setOnitemClickListener(object : AdapterView.OnitemClickListener{
override fun onitemClick(parent:Adapter<*>?, view:View?, position:Int, id:Long){
when(parent?.id){
R.id.list1 -> { // 아이템 클릭시 수행할 동작 }
}
}})
*/
/*
// 익명클래스로 구현하고 객체를 생성해 그 객체를 리스너에 달아 사용
mainBinding.listview1.setOnitemClickListener(listener1)
val listener1 = object : AdapterView.OnitemClickListener{
override fun onitemClick(parent:Adapter<*>?, view:View?, position:Int, id:Long){
when(parent?.id){
R.id.list1 -> { // 아이템 클릭시 수행할 동작 }
}
}
}
*/
}
// AdapterView의 OnitemClickListener를 상속받아 inner 클래스를 만들어 사용
inner class ListitemClickListener1 : AdapterView.OnitemClickListener{
override fun onitemClick(parent:Adapter<*>?, view:View?, position:Int, id:Long) {
// 첫번째 : 이벤트가 발생한 항목을 가지고 있는 adapterview
// 두번째 : 이벤트가 발생한 항목 view
// 세번째 : 이벤트가 발생한 항목의 index
when(parent?.id){
R.id.list1 -> { // 아이템 클릭시 수행할 동작 }
}
}
}
}
GridView
- Grid 형태의 ListView 와 거의 동일한 기능 + 추가된 기능을 갖음
GridView 주요 속성
- numColumns : 그리드로 구성할 칸의 개수, auto_fit 으로 설정시 디바이스에 맞게 자동 구성
GridView 주요 이벤트
- onItemClick : 그리드뷰의 항목을 선택했을 때 동작/기능
binding.grid1.setOnItemClickListener(listener1)
} //onCreate() 끝
val listener1 = object : AdapterView.OnItemClickListener{
override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
when (p0?.id) {
R.id.grid1 -> {
binding.textView.text = "${data1[p2]} 항목을 클릭"
}
}
}
}
// 리스너를 상속받아 오버라이딩할 메소드가 하나밖에 없을 경우 고차함수로 작성 가능
binding.grid1.setOnItemClickListener { adapterView, view, i, l ->
binding.textView.text = "${data1[i]} 항목을 클릭"
}
반응형
'Android' 카테고리의 다른 글
[안드로이드/Style] 색상 지정 (0) | 2022.09.15 |
---|---|
[안드로이드/AdapterView] Custom ListView (0) | 2022.09.14 |
[안드로이드/Layout] Layout의 개념/종류 (0) | 2022.09.06 |
[안드로이드/View] View Binding (0) | 2022.09.06 |
[안드로이드/View] View의 개념 (0) | 2022.09.03 |