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
'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 |