중첩 클래스를 이용한 ListView Listener 구현
354
2 câu hỏi đã được viết
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쪽을 공부하고 있습니다
개인적으로는 람다식보다 중첩 클래스가 더 편해서, 중첩 클래스로 구현하고자 하는데 이렇게 구현하니깐
눌러도 아무런 반응이 없습니다. 어떻게 바꾸어야 하나요?
Câu trả lời 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를 접근하지 못하는 경우도 있기 때문에 거기에서 리플렉션을 사용해야 합니다... 상당 부분을 수정하셔야 하기 때문에 람다로 하는걸 추천드립니다. 람다를 사용하지 않으시면 이래저래 굉장히 불편합니다....
실무 내용 문의드려요
0
24
2
앱 초기 진입시 전면광고 관련 질문
0
51
2
원하지 않은 외국인 유입
0
77
2
페이징 처리에서 offset/limit에 대한 질문
1
57
1
안녕하세요 질문있습니다.
0
46
2
프로젝트 의존 관계
0
53
2
다음 수업을 듣고싶으면 어떻게해야하나요...ㅠㅠ
0
316
1
ActionBar 강의 중 android.support.v7.widget.SearchView 오류 관련
0
214
0
res menu 만들기
0
211
1
21:07에 확인버튼을 눌러야하는데 취소버튼을 눌러서 출력이 안되는겁니다.
0
166
0
안드로이드 스튜디오의 xml 텍스트로 보기
0
495
2
map과 hashmap의 차이는 무엇인가요?
0
643
1
오타
0
218
1
체크박스 전체체크에 관해
0
251
1
강의 진행율 ... 미수강 강의 항목을 어떻게 알 수 있을꺼야?
0
524
1
설명 소리가 안들려요
0
236
1
Intel HAXM is required to run this AVD라는 오류가 뜨네요
0
248
1
view의 id가 왜 정수형 자료인가요?
0
318
1
안드 스튜디오 3.4.2 인데요
0
196
1
강의가 안드로이드 8.0버전인데
0
135
0
디바이스로 테스트 할 때 디바이스 적용되는 속도를 향상 시킬 수 있을까요?
0
232
0
제발
2
227
1
수업자료 관련 질문
1
145
0
RecyclerView
0
249
3

