diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 254dd70..bd626e8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
index a105a5f..6317439 100644
--- a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
+++ b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
@@ -16,6 +16,7 @@ class ExtActivity : CommonListActivity() {
add(ItemBean("ToastExt", ToastExtActivity::class.java))
add(ItemBean("AppExt", ToastExtActivity::class.java))
add(ItemBean("IntentExt", IntentExtActivity::class.java))
+ add(ItemBean("ListenerExtActivity", ListenerExtActivity::class.java))
add(ItemBean("PermissionExt",PermissionExtActivity::class.java))
add(ItemBean("SharedPreferencesExt",SharedPreferencesActivity::class.java))
}
diff --git a/app/src/main/java/luyao/util/ktx/ui/ListenerExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ListenerExtActivity.kt
new file mode 100644
index 0000000..d902c58
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/ui/ListenerExtActivity.kt
@@ -0,0 +1,31 @@
+package luyao.util.ktx.ui
+
+import kotlinx.android.synthetic.main.activity_listener.*
+import kotlinx.android.synthetic.main.title_layout.*
+import luyao.ktx.R
+import luyao.util.ktx.base.BaseActivity
+import luyao.util.ktx.ext.textWatcher
+import luyao.util.ktx.ext.toast
+
+/**
+ * Created by luyao
+ * on 2019/7/9 16:24
+ */
+class ListenerExtActivity : BaseActivity() {
+
+ override fun getLayoutResId() = R.layout.activity_listener
+
+ override fun initView() {
+ mToolbar.title = "ListenerExtActivity"
+ }
+
+ override fun initData() {
+ listenerEt.textWatcher {
+ onTextChanged { s, start, before, count ->
+ toast(s.toString())
+ }
+
+ afterTextChanged { toast(it.toString()) }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_listener.xml b/app/src/main/res/layout/activity_listener.xml
new file mode 100644
index 0000000..14584fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_listener.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/mainStyles.xml b/app/src/main/res/values/mainStyles.xml
index fed0436..b7610f6 100644
--- a/app/src/main/res/values/mainStyles.xml
+++ b/app/src/main/res/values/mainStyles.xml
@@ -14,4 +14,23 @@
- @color/black
- @drawable/ripple
+
+
\ No newline at end of file
diff --git a/ktx/src/main/java/luyao/util/ktx/ext/ListenerExt.kt b/ktx/src/main/java/luyao/util/ktx/ext/ListenerExt.kt
new file mode 100644
index 0000000..bb45ba2
--- /dev/null
+++ b/ktx/src/main/java/luyao/util/ktx/ext/ListenerExt.kt
@@ -0,0 +1,46 @@
+package luyao.util.ktx.ext
+
+import android.text.Editable
+import android.text.TextWatcher
+import android.widget.TextView
+
+/**
+ * Created by luyao
+ * on 2019/7/9 16:13
+ */
+
+fun TextView.textWatcher(watcher: KtxTextWatcher.() -> Unit) =
+ addTextChangedListener(KtxTextWatcher().apply(watcher))
+
+class KtxTextWatcher : TextWatcher {
+
+ private var _afterTextChanged: ((Editable?) -> Unit)? = null
+ private var _beforeTextChanged: ((CharSequence?, Int, Int, Int) -> Unit)? = null
+ private var _onTextChanged: ((CharSequence?, Int, Int, Int) -> Unit)? = null
+
+
+ fun afterTextChanged(listener: ((Editable?) -> Unit)) {
+ _afterTextChanged = listener
+ }
+
+ fun beforeTextChanged(listener: (CharSequence?, Int, Int, Int) -> Unit) {
+ _beforeTextChanged = listener
+ }
+
+ fun onTextChanged(listener: (CharSequence?, Int, Int, Int) -> Unit) {
+ _onTextChanged = listener
+ }
+
+ override fun afterTextChanged(s: Editable?) {
+ _afterTextChanged?.invoke(s)
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
+ _beforeTextChanged?.invoke(s, start, count, after)
+ }
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+ _onTextChanged?.invoke(s, start, before, count)
+ }
+
+}
\ No newline at end of file