안드로이드/AdapterView

안드로이드 MultiChoiceListView

김어찐 2022. 6. 7. 18:18
728x90

다수의 항목을 제공하고 항목 중 다수를 선택할 수  있는 ListView 이다.
ListView의 Mode를 변경하여 설정한다.

 

Mode 설정

구현 방법은 ListView와 동일하며 ListView를 MultiChoice로 설정해준다.

list1.choiceMode = ListView.CHOICE_MODE_MULTIPLE

 

코드처리

사용자가 선택한 항목이 무엇인지 파악해야 할 때 ListView의 checkedItemPositions 프로퍼티를 활용한다.
이 프로퍼티는 SparseBooleanArray라는 클래스의 객체가 담겨져 있는데 이 객체에는 true가 설정된 항목과 체크 상태가 변경된적이 있는 항목의 인덱스 번화 체크 상태 값을 가지고 있다.

 

package com.example.multichoicelistview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    val data1 = arrayOf("항목1","항목2","항목3","항목4","항목5","항목6","항목7","항목8")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val adapter1 = ArrayAdapter(this,android.R.layout.simple_list_item_multiple_choice,data1)
        list1.adapter = adapter1
        list1.choiceMode=ListView.CHOICE_MODE_MULTIPLE

        list1.setItemChecked(0,true)
        list1.setItemChecked(2,true)
        list1.setItemChecked(5,true)

        button.setOnClickListener {
            textView.text=""

            //현재 채크 상태에 관련된 객체를 가져온다.
            val boolArray = list1.checkedItemPositions

//            textView.text="개수 : ${boolArray.size()}"

            for (idx in 0 until boolArray.size()) {
//                textView.append("${boolArray.keyAt(idx)}")
                //항목의 인덱스 번호
                val key = boolArray.keyAt(idx)

                // 해당 항목이 체크되어 있는 확인한다.
                if (boolArray[key] == true) {
                    textView.append("${data1[key]},")
                }
            }

        }
    }
}

 

728x90