반응형
MultiAutoCompleteTextView
- 구분자를 이용해 여러 문자열을 동시에 입력받을 수 있고, AutoCompleteTextView 와 동일하게 문자열 자동완성 기능
- 구분자 설정 메서드 외에는 주요 속성, 메소드, 이벤트도 동일
MultiAutoCompleteTextView 주요 메서드
- setTokenizer : 구분자를 설정
MultiAutoCompleteTextView 주요 메서드
- setAdapter
- setTokneizer
//구분자 (기본적으론 , 재공 -> 다른 구분자 사용하려면 직접 다 구현해야 해서 상당히 복잡)
binding.multiAutoCompleteTextView.setTokenizer(MultiAutoCompleteTextView.CommaTokenizer()) // 콤마 구분자 객체를 생성해 설정
binding.multiAutoCompleteTextView.setAdapter(adapter1)
MultiAutoCompleteTextView 주요 속성
- completionThreshold : 몇글자를 입력했을 때 자동완성 리스트가 나타날지 결정
MultiAutoCompleteTextView 주요 프로퍼티
- text : 입력한 문자열을 가져옴 *split() 안 하면 구분자까지 모두 가져옴
binding.button.setOnClickListener {
val strArray = binding.multiAutoCompleteTextView.text.split(",") //split 안 하면 구분자 그대로 나옴
binding.textView.text =""
for (str1 in strArray) {
if (str1.trim() != "") { // 앞뒤 공백제거까지 한 문자열이 null 이 아니라면
binding.textView.append("${str1.trim()}\n")
}
}
}
** 아래 메서드는 해당 코드로 경우에 따라 제대로 작동하지 않음 **
MultiAutoCompleteTextView 주요 이벤트
- ItemClick : 제공되는 자동완성 리스트의 항목을 클릭할 경우 발생 (오버라이딩할 메소드 1개라 고차함수로 작성 가능)
binding.multiAutoCompleteTextView.setOnItemClickListener { adapterView, view, i, l ->
binding.textView2.text = "${data1[i]} 항목 클릭"
}
'm' 을 입력하면 자동완성 리스트 melon 이 뜨게 되는게 해당 목록에서 melon 의 인덱스는 0이다.
따라서 data1[0] 이 출력되는데 data1 에서의 인덱스 0번째 데이터는 banana 이기 때문에 아래와 같이 의도한 바와는 다른 결과를 얻게 된다.
completionThreshold를 0으로 설정하고 한번 입력했던 값을 모두 지웠을 때 아래 이미지와 같이 모든 항목 리스트가 다 뜨게 되는데
이때는 선택한 자동완성 리스트의 항목이 정상적으로 출력되는 것을 알 수 있다. 즉, 자동완성 리스트가 이렇게 data를 저장한 자료구조와 동일하게 나와야지 itemClick 메서드는 제 기능을 하기 때문에 주의해서 사용할 필요가 있다.
반응형
'Android' 카테고리의 다른 글
[안드로이드/AdapterView] MultiChoiceListView (0) | 2023.02.28 |
---|---|
[안드로이드/AdapterView] SingleChoiceListView (0) | 2023.02.28 |
[안드로이드/AdapterView] AutoCompleteTextView (0) | 2023.02.27 |
[안드로이드/AdapterView] ViewPager (0) | 2023.02.25 |
[안드로이드/AdapterView] Spinner (0) | 2023.02.24 |