Android

[Android] 리스트뷰 Listview 이벤트 처리(item click event)

은 딩 2022. 12. 31. 01:18

어느 줄을 눌렀는지 "위치 파악"이 중요!!

 

버튼을 누르는 이벤트 : setOnClickListener

리스트뷰의 각 줄을 누르는 이벤트 : setOnItemClickListener

=> 각각의 줄이 눌렸을 때 => 어떤 줄이 눌렸는지 파악하면서 실행되는 함수

=> position or i 변수가 몇번 줄이 눌렸는지 알려주는 역할

=> 해당 위치에 맞는 데이터를 뽑아내서 작업 진행

 

  • item들이 있는 곳이 activity_main.xml이므로 연결돼있는 MainActivity.kt에서 진행
  • Listview Item이 클릭됐을 때 toast로 찍어보기
    (Item은 Listview의 한 줄이라고 생각하면 된다!)
viewBinding.studentListView.setOnItemClickListener { parent, view, position, id ->
    val clickedStudent = mStudentList[position]
    Toast.makeText(this, "${clickedStudent.name}이 클릭 됨", Toast.LENGTH_SHORT).show()
}

 

추가 이벤트 : setOnItemLongClickListener

=> 해당 줄을 오래 누르고 있을 때 실행되는 이벤트 처리 코드

=> 보통 부가 메뉴 호출 / 편집 / 삭제 등의 기능으로 주로 사용

=> return 자동 완성 필요 - true : 롱클릭만 전용 실행O (대부분 true) 
     / false : 롱클릭 전용X, 손을 떼는 시점에 클릭 이벤트도 같이 실행

viewBinding.studentListView.setOnItemLongClickListener { parent, view, position, id ->
    val longClickedStudent = mStudentList[position]
    Toast.makeText(this, "${longClickedStudent.name}이 롱클릭 됨", Toast.LENGTH_SHORT).show()
    return@setOnItemLongClickListener true
}

-> return 안 하면 에러

 


MainActivity.kt

package com.eunjeong.listview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.eunjeong.listview.adapters.StudentAdapter
import com.eunjeong.listview.databinding.ActivityMainBinding
import com.eunjeong.listview.datas.Student

class MainActivity : AppCompatActivity() {

    val mStudentList = ArrayList<Student>()

    lateinit var mAdapter : StudentAdapter

    private lateinit var viewBinding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(viewBinding.root)

        mStudentList.add( Student("은딩", 2000) )
        mStudentList.add( Student("은조", 2001) )
        mStudentList.add( Student("하이", 1999) )
        mStudentList.add( Student("승승", 1987) )
        mStudentList.add( Student("은혜", 1980) )
        mStudentList.add( Student("재석", 1970) )
        mStudentList.add( Student("석진", 2007) )
        mStudentList.add( Student("유진", 2002) )

        mAdapter = StudentAdapter(this, R.layout.student_list_item, mStudentList)

        viewBinding.studentListView.adapter = mAdapter


        viewBinding.studentListView.setOnItemClickListener { parent, view, position, id ->
            val clickedStudent = mStudentList[position]
            Toast.makeText(this, "${clickedStudent.name}이 클릭 됨", Toast.LENGTH_SHORT).show()
        }

        viewBinding.studentListView.setOnItemLongClickListener { parent, view, position, id ->
            val longClickedStudent = mStudentList[position]
            Toast.makeText(this, "${longClickedStudent.name}이 롱클릭 됨", Toast.LENGTH_SHORT).show()

            return@setOnItemLongClickListener true
        }
    }
}

코드는 밑 글에 이어서 작성(크게 상관은 없음)

https://dkan9634.tistory.com/87

 

[Android] 리스트뷰 Listview 기초(생성부터 적용까지)

보통 recycler view를 많이 쓰는데, Listview를 알면 recycler view를 조금 더 쉽게 배울 수 있어서 List view를 먼저 공부하는 중이다. 1. Activity 화면(XML)에 ListView 배치 + id 부여 => 아직 아무것도 안 나옴!! 밑

dkan9634.tistory.com