중첩 클래스를 이용한 ListView Listener 구현
345
작성한 질문수 2
package com.example.applearning
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Adapter
import android.widget.AdapterView
import android.widget.SimpleAdapter
import kotlinx.android.synthetic.main.activity_adapter_view2.*
class AdapterView2 : AppCompatActivity() {
/*
Two Line ListView
문자열(TextView) 2개를 보여줄때 사용하는 ListView
*/
private var data1TwoLineList = arrayOf("문자열1","문자열2","문자열3","문자열4","문자열5","문자열6")
private var data2TwoLineList = arrayOf("String1","String2","String3","String4","String5","String6")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_adapter_view2)
//공통 리스너
val adapterListener =ListListener()
//1) TwoLineList 예제
var listTwoLineList = ArrayList<HashMap<String,String>>()
var idx=0
while(idx<data1TwoLineList.size){
var map = HashMap<String,String>()
//이렇게 표시하는게 좀더 나은 방법이라고 안드로이드 스튜디오에서 추천중
map["str1"] = data1TwoLineList[idx]
map.put("str2",data2TwoLineList[idx])
listTwoLineList.add(map)
idx++
}
var keyTwoLineList = arrayOf("str1","str2")
var idsTwoLineList = intArrayOf(android.R.id.text1,android.R.id.text2)
/*
SimpleAdapter 를 써야 2가지 이상 항목을 담을 수 있고
simple expandable list item 2 이 TextView 를 2개 담는 Adapter
*/
var adapterTwoLineList= SimpleAdapter(this,listTwoLineList,android.R.layout.simple_expandable_list_item_2,keyTwoLineList,idsTwoLineList)
two_line_list_view.adapter=adapterTwoLineList
//Listener setting
two_line_list_view.onItemClickListener=adapterListener
}
//Listener 모음
inner class ListListener : AdapterView.OnItemClickListener{
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
when(view?.id){
R.id.two_line_list_view
-> two_line_list_txt_.text = data1TwoLineList[position]
}
}
}
}
Adapter쪽을 공부하고 있습니다
개인적으로는 람다식보다 중첩 클래스가 더 편해서, 중첩 클래스로 구현하고자 하는데 이렇게 구현하니깐
눌러도 아무런 반응이 없습니다. 어떻게 바꾸어야 하나요?
답변 2
0
해결했습니다.
아래 코드에서 view가 아닌 parent로 하면 되더군요
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
when(view?.id){
R.id.two_line_list_view
-> two_line_list_txt_.text = data1TwoLineList[position]
}
}
0
음... 람다식을 사용하지 않았기 때문에 상당 부분 손을 보셔야 합니다. 일단 확인해 보셔야 할 부분이 onItemClick 메서드가 호출되는지 확인해보셔야 합니다. 또 중첩클래스 안에서 MainActivity의 View를 접근하지 못하는 경우도 있기 때문에 거기에서 리플렉션을 사용해야 합니다... 상당 부분을 수정하셔야 하기 때문에 람다로 하는걸 추천드립니다. 람다를 사용하지 않으시면 이래저래 굉장히 불편합니다....
6강에 비디오가 이상해요
0
27
2
진입 여부 판단 기준 질문
0
77
3
피그마 first draft 기능 질문
0
48
3
upup 질문
0
57
2
data.ai 필터링 검색이 안됩니다!
0
47
1
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
47
1
다음 수업을 듣고싶으면 어떻게해야하나요...ㅠㅠ
0
308
1
ActionBar 강의 중 android.support.v7.widget.SearchView 오류 관련
0
209
0
res menu 만들기
0
205
1
21:07에 확인버튼을 눌러야하는데 취소버튼을 눌러서 출력이 안되는겁니다.
0
157
0
안드로이드 스튜디오의 xml 텍스트로 보기
0
477
2
map과 hashmap의 차이는 무엇인가요?
0
632
1
오타
0
208
1
체크박스 전체체크에 관해
0
245
1
강의 진행율 ... 미수강 강의 항목을 어떻게 알 수 있을꺼야?
0
515
1
설명 소리가 안들려요
0
230
1
Intel HAXM is required to run this AVD라는 오류가 뜨네요
0
239
1
view의 id가 왜 정수형 자료인가요?
0
309
1
안드 스튜디오 3.4.2 인데요
0
189
1
강의가 안드로이드 8.0버전인데
0
126
0
디바이스로 테스트 할 때 디바이스 적용되는 속도를 향상 시킬 수 있을까요?
0
222
0
제발
2
221
1
수업자료 관련 질문
1
137
0
RecyclerView
0
240
3





