Android/Kotlin

RecyclerView Click이벤트 구현

lipnus 2019. 3. 14. 13:53
반응형

RecyclerView Click이벤트 구현




RecyclerViewAdapter

class RecyclerViewAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {

//데이터를 저장할 아이템리스트
val items = ArrayList<ChargePointItem>()



//클릭 인터페이스 정의
interface ItemClickListener {
fun onClick(view: View, position: Int)
}

//클릭리스너 선언
private lateinit var itemClickListner: ItemClickListener

//클릭리스너 등록 매소드
fun setItemClickListener(itemClickListener: ItemClickListener) {
this.itemClickListner = itemClickListener
}



...

-클릭리스너 인터페이스를 정의한다. 외부에서 하든 어디든 상관없다.

-리스너 선언한다.

-리스너를 등록하는 매소드( setItemClickListener )를 정의한다. 액티비티에서 등록한다.




//각각의 아이템의 데이터를 바인딩 시켜준다
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
var view = holder as CustomViewHolder
view.pointTv!!.text = items[position].point.toString()
view.priceTv!!.text = items[position].price.toString()

//view에 onClickListner를 달고, 그 안에서 직접 만든 itemClickListener를 연결시킨다
holder.itemView.setOnClickListener {
itemClickListner.onClick(it, position)
}
}

-onBindView홀더에서 view에 setOnclickListener를 달고, 위에서 직접만든 ItemClickListener를 호출 





MainActivity

class MainActivity : AppCompatActivity() {


private val adapter = RecyclerViewAdapter()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(com.empo.android.empoapp.R.layout.activity_main)

initLayout()
}

...

fun initLayout(){
recyclerview.adapter = adapter
recyclerview.layoutManager = LinearLayoutManager(this)

with(adapter) {
addItem(RecyclerItem(100, 1.0))
addItem(RecyclerItem(150, 1.5))
addItem(RecyclerItem(350, 3.5))
addItem(RecyclerItem(500, 5.5))
addItem(RecyclerItem(750, 7.5))
}

//클릭리스너 등록
adapter.setItemClickListener( object : RecyclerViewAdapter.ItemClickListener{
override fun onClick(view: View, position: Int) {
Log.d("SSS", "${position}번 리스트 선택")
}
})
}


...


코틀린에서 익명으로 객체선언할 때 object : RecyclerViewAdapter.ItemClickListener 이런 형식으로 한다.


java면 new Recyclerview.ItemClickListener(){ 요런식으로.   






*인터페이스 리스너(callback) 개념: https://sunpil.tistory.com/115?category=766548


*RecyclerView(Linear): https://sunpil.tistory.com/81?category=748942


*RecyclerView(Grid): https://sunpil.tistory.com/80?category=748942




참고: https://machine-woong.tistory.com/45

반응형

'Android > Kotlin' 카테고리의 다른 글

EditText에 화페단위 콤마 표시  (1) 2019.03.18
ViewPager 예제  (0) 2019.03.14
Activity - Fragment 간 Communication  (0) 2019.03.13
@JvmStatic (자바,코틀린 static매소드 연동)  (0) 2019.03.13
클립보드 복사  (0) 2019.03.08