작성
·
261
0
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를 접근하지 못하는 경우도 있기 때문에 거기에서 리플렉션을 사용해야 합니다... 상당 부분을 수정하셔야 하기 때문에 람다로 하는걸 추천드립니다. 람다를 사용하지 않으시면 이래저래 굉장히 불편합니다....