이번 시간에는 RecyclerView로 만든 리스트의 아이템 다중 선택하는 방법을 알아보겠습니다.
- 설명 -
1. 데이터 담는 클래스
data class Item(
var name: String,
var selected: Boolean
)
- 설명 -
1. 데이터를 보여줄 화면
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/itemText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
- 설명 -
1. private lateinit var itemList: ArrayList<Item>
데이터 담을 리스트
2. onCreateViewHolder
화면 설정 함수
3. onBindViewHolder
데이터 설정 함수
4. setMultipleSelection
선택 행 값 변경해주는 함수
class ItemAdapter(): RecyclerView.Adapter<ItemAdapter.ItemViewHolder>(){
private lateinit var itemList: ArrayList<Item>
// 생성자
constructor(itemList: ArrayList<Item>): this(){
this.itemList = itemList
}
/**
* 화면 설정
*/
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val inflater = LayoutInflater.from(parent.context)
val view: View = inflater.inflate(R.layout.list_item, parent, false)
return ItemViewHolder(view)
}
/**
* 데이터 설정
*/
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
//아이템 담기
val item: Item = itemList[position]
//화면에 데이터 보여주기
holder.itemText.text = item.name
//클릭 이벤트
holder.layout.setOnClickListener {
//멀티 선택 함수
setMultipleSelection(position)
}
//선택값에 따른 배경색 설정
if(item.selected){
holder.itemView.setBackgroundColor(Color.parseColor("#90CAF9"))
}else{
holder.itemView.setBackgroundColor(Color.parseColor("#EF9A9A"))
}
}
/**
* 아이템 갯수
*/
override fun getItemCount(): Int = itemList.size
/**
* 멀티 선택
*/
private fun setMultipleSelection(position: Int){
//반대의 값을 넣는다.
itemList[position].selected = !itemList[position].selected
// 데이터 적용
notifyItemChanged(position)
}
class ItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
val layout: LinearLayout = itemView.findViewById(R.id.layout)
val itemText: TextView = itemView.findViewById(R.id.itemText)
}
}
- 설명 -
1. 리스트 보여줄 RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- 설명 -
1. getData()
리스트에 담을 데이터 생성
2. itemList.add(Item("$index 번째 아이템", false))
데이터 생성해서 리스트에 담기
3. val adapter = ItemAdapter(getData())
데이터 담은 리스트 어댑터 생성자에 넘겨준다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//초기화
val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
val adapter = ItemAdapter(getData())
//recycelrView 설정
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = adapter
}
/**
* 데이터 생성
*/
private fun getData(): ArrayList<Item>{
val itemList: ArrayList<Item> = ArrayList()
for(index in 1..10){
itemList.add(Item("$index 번째 아이템", false))
}
return itemList
}
}
2022.09.21 - [안드로이드] - [안드로이드 코트린] SharedPreferences 간단한 데이터 저장하는 방법
2022.09.20 - [안드로이드] - [안드로이드 코틀린] 코드(MainActivity) 에서 배경 색상 바꾸는 다양한 방법
2022.09.19 - [안드로이드] - [안드로이드 코틀린] RecyclerView 홀수 행, 짝수 행 별 색상 다르게 하는 방법
[안드로이드 코틀린] Ringtone 효과음 내는 방법 (0) | 2022.09.26 |
---|---|
[안드로이드 코틀린] RecyclerView 다중 선택 삭제하는 방법 (0) | 2022.09.23 |
[안드로이드 코틀린] SharedPreferences 간단한 데이터 저장하는 방법 (0) | 2022.09.21 |
[안드로이드 코틀린] 코드(MainActivity) 에서 배경 색상 바꾸는 다양한 방법 (0) | 2022.09.20 |
[안드로이드 코틀린] RecyclerView 홀수 행, 짝수 행 별 색상 다르게 하는 방법 (0) | 2022.09.19 |
댓글 영역