@@ -79,15 +79,18 @@ class CheckableTextView : RelativeLayout {
7979 }
8080
8181 animateView(checkedIV, isChecked)
82- rootRL.setOnClickListener {
82+ rootRL.setOnClickListener(clickListener())
83+ }
84+
85+ private fun clickListener (): (v: View ) -> Unit {
86+ return {
8387 checkedTextTV.text = checkedTextTV.text
8488 checkedTextTV.isSelected = true
8589 isChecked = ! isChecked
8690 animateView(checkedIV, isChecked)
8791 notifyListener(isChecked)
8892 }
8993 }
90-
9194 private fun applyTextStyle (textStyle : Int , context : Context ) {
9295 if (isValidRes(textStyle)) {
9396 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
@@ -125,19 +128,40 @@ class CheckableTextView : RelativeLayout {
125128 listener?.onCheckChange(this , isChecked)
126129 }
127130
131+
132+ private fun getRippleDrawable (): Int {
133+ val outValue = TypedValue ()
134+ context.theme.resolveAttribute(android.R .attr.selectableItemBackground, outValue, true )
135+ return outValue.resourceId
136+ }
137+
138+
139+ /* -------------------------------------------------public functions------------------------------------------------------------------------------------------*/
140+
141+
142+ fun setClickEnabled (isClickable : Boolean ) {
143+ // 0.5 second delay added to ongoing ripple animation to complete (if any)
144+ rootRL.postDelayed(
145+ { rootRL.setBackgroundResource(if (isClickable) getRippleDrawable() else android.R .color.transparent) },
146+ 500
147+ )
148+ rootRL.setOnClickListener(if (isClickable) clickListener() else null )
149+ }
150+
128151 fun setOnCheckChangeListener (listener : CheckedListener ) {
129152 this .listener = listener
130153 }
131154
132- fun setChecked (isChecked : Boolean , shouldNotifyListeners : Boolean ) {
155+ fun setChecked (isChecked : Boolean , shouldNotifyListeners : Boolean =false ) {
133156 this .isChecked = isChecked
134157 animateView(checkedIV, isChecked)
135158 if (shouldNotifyListeners)
136159 notifyListener(isChecked)
137160 }
138161
139- fun setChecked (isChecked : Boolean ) {
140- setChecked(isChecked, false )
162+
163+ fun isChecked (): Boolean {
164+ return this .isChecked
141165 }
142166
143167 interface CheckedListener {
0 commit comments