inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코틀린 기반 안드로이드 앱개발 기본 1단계

중첩 클래스를 이용한 ListView Listener 구현

345

akainoo

작성한 질문수 2

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쪽을 공부하고 있습니다

개인적으로는 람다식보다 중첩 클래스가 더 편해서, 중첩 클래스로 구현하고자 하는데 이렇게 구현하니깐 

눌러도 아무런 반응이 없습니다. 어떻게 바꾸어야 하나요?

kotlin android

답변 2

0

akainoo

해결했습니다. 

아래 코드에서 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