-
Notifications
You must be signed in to change notification settings - Fork 51
/
CustomViewEventActivity.kt
111 lines (96 loc) · 3.62 KB
/
CustomViewEventActivity.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package smartrecycleradapter.feature
/*
* Created by Manne Öhlund on 2020-09-23.
* Copyright (c) All rights reserved.
*/
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_simple_item.recyclerView
import smartadapter.Position
import smartadapter.SmartRecyclerAdapter
import smartadapter.viewevent.listener.OnCustomViewEventListener
import smartadapter.viewevent.model.ViewEvent
import smartadapter.viewevent.viewholder.CustomViewEventListenerHolder
import smartadapter.viewholder.SmartAdapterHolder
import smartadapter.viewholder.SmartViewHolder
import smartrecycleradapter.R
import smartrecycleradapter.utils.showToast
@SuppressLint("ClickableViewAccessibility")
class CustomViewEventActivity : BaseSampleActivity() {
class CustomEvent(
adapter: SmartRecyclerAdapter,
viewHolder: SmartViewHolder<*>,
position: Position,
view: View
) : ViewEvent(adapter, viewHolder, position, view)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.title = "Custom View Event Sample"
val items = (0..100).toMutableList()
SmartRecyclerAdapter
.items(items)
.map(Integer::class, SimpleCustomViewEventListenerViewHolder::class)
.add(OnCustomViewEventListener { event ->
showToast(event)
})
.into<SmartRecyclerAdapter>(recyclerView)
}
fun showToast(event: ViewEvent) {
val touchEvent =
(event as? ViewEvent.OnTouchEvent)?.run { "\n\n${this.event}" } ?: ""
showToast("${event.viewHolder::class.simpleName}\n${event::class.simpleName} ${event.position} $touchEvent")
}
open class SimpleCustomViewEventListenerViewHolder(parentView: ViewGroup) :
SmartViewHolder<Int>(parentView, R.layout.simple_item),
CustomViewEventListenerHolder,
SmartAdapterHolder {
override lateinit var customViewEventListener: (ViewEvent) -> Unit
override var smartRecyclerAdapter: SmartRecyclerAdapter? = null
init {
itemView.setOnTouchListener { view: View, event: MotionEvent ->
when (event.action) {
MotionEvent.ACTION_CANCEL -> {
customViewEventListener.invoke(
ViewEvent.OnTouchEvent(
smartRecyclerAdapter!!,
this,
adapterPosition,
view,
event
)
)
}
}
false
}
itemView.setOnClickListener { view ->
customViewEventListener.invoke(
ViewEvent.OnClick(
smartRecyclerAdapter!!,
this,
adapterPosition,
view
)
)
}
itemView.setOnLongClickListener { view ->
customViewEventListener.invoke(
CustomEvent(
smartRecyclerAdapter!!,
this,
adapterPosition,
view
)
)
true
}
}
override fun bind(item: Int) {
(itemView as TextView).text = "Item $item"
}
}
}