inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

354

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

앱내 광고 빈도 관련 문의사항

0

13

2

실무 내용 문의드려요

0

27

2

앱 초기 진입시 전면광고 관련 질문

0

55

2

원하지 않은 외국인 유입

0

78

2

페이징 처리에서 offset/limit에 대한 질문

1

60

1

안녕하세요 질문있습니다.

0

46

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

237

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