pref: 优化搜索框行为
This commit is contained in:
parent
a2ac37eacd
commit
41a47806d2
|
|
@ -2,6 +2,7 @@ package com.huanchengfly.tieba.post.activities
|
|||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.KeyEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
|
|
@ -37,6 +38,7 @@ import com.huanchengfly.tieba.post.ui.common.theme.utils.ColorStateListUtils
|
|||
import com.huanchengfly.tieba.post.utils.AnimUtil
|
||||
import com.huanchengfly.tieba.post.utils.ThemeUtil
|
||||
import com.huanchengfly.tieba.post.utils.anim.animSet
|
||||
import com.huanchengfly.tieba.post.utils.bindKeyEvent
|
||||
import com.huanchengfly.tieba.post.widgets.MyViewPager
|
||||
import org.litepal.LitePal
|
||||
|
||||
|
|
@ -64,11 +66,11 @@ class NewSearchActivity : BaseActivity(), TabLayout.OnTabSelectedListener {
|
|||
private var keyword: String? = null
|
||||
set(value) {
|
||||
field = value
|
||||
if (value != null) {
|
||||
if (!value.isNullOrBlank()) {
|
||||
SearchHistory(value)
|
||||
.saveOrUpdate("content = ?", value)
|
||||
}
|
||||
state = if (value == null) {
|
||||
state = if (value.isNullOrBlank()) {
|
||||
State.INPUT
|
||||
} else {
|
||||
State.SEARCH
|
||||
|
|
@ -115,15 +117,18 @@ class NewSearchActivity : BaseActivity(), TabLayout.OnTabSelectedListener {
|
|||
recyclerView.adapter = delegateAdapter
|
||||
editText.setOnEditorActionListener { v, actionId, _ ->
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
|
||||
KeyboardUtil.hideKeyboard(v)
|
||||
keyword = v.text.toString()
|
||||
if (!keyword.isNullOrBlank()) KeyboardUtil.hideKeyboard(v)
|
||||
return@setOnEditorActionListener true
|
||||
}
|
||||
return@setOnEditorActionListener false
|
||||
}
|
||||
editText.bindKeyEvent(listOf(KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER)) {
|
||||
keyword = it.text.toString()
|
||||
}
|
||||
keyword = intent.getStringExtra(EXTRA_KEYWORD)
|
||||
editText.post {
|
||||
if (keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
KeyboardUtil.showKeyboard(editText)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.huanchengfly.tieba.post.activities
|
|||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.KeyEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.LinearInterpolator
|
||||
|
|
@ -35,6 +36,7 @@ import com.huanchengfly.tieba.post.utils.PopupUtil
|
|||
import com.huanchengfly.tieba.post.utils.ThemeUtil
|
||||
import com.huanchengfly.tieba.post.utils.Util
|
||||
import com.huanchengfly.tieba.post.utils.anim.animSet
|
||||
import com.huanchengfly.tieba.post.utils.bindKeyEvent
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||
import org.litepal.LitePal
|
||||
import retrofit2.Call
|
||||
|
|
@ -256,11 +258,14 @@ class SearchPostActivity : BaseActivity() {
|
|||
}
|
||||
return@setOnEditorActionListener false
|
||||
}
|
||||
editText.bindKeyEvent(listOf(KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER)) {
|
||||
keyword = it.text.toString()
|
||||
}
|
||||
editText.hint = getString(R.string.hint_search_in_ba, forumName)
|
||||
}
|
||||
|
||||
fun refresh() {
|
||||
if (keyword == null || keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
refreshLayout.finishRefresh(false)
|
||||
return
|
||||
}
|
||||
|
|
@ -284,7 +289,7 @@ class SearchPostActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
private fun loadMore() {
|
||||
if (keyword == null || keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
refreshLayout.finishLoadMore(false)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,7 +87,8 @@ class SearchForumFragment : BaseFragment(), ISearchFragment,
|
|||
}
|
||||
|
||||
private fun refresh() {
|
||||
if (keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
refreshLayout?.finishRefresh()
|
||||
return
|
||||
}
|
||||
getInstance().searchForum(keyword!!).enqueue(object : Callback<SearchForumBean> {
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ class SearchThreadFragment : BaseFragment(), ISearchFragment, NewSearchActivity.
|
|||
}
|
||||
|
||||
private fun refresh() {
|
||||
if (keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
return
|
||||
}
|
||||
page = 1
|
||||
|
|
|
|||
|
|
@ -126,7 +126,8 @@ class SearchUserFragment : BaseFragment(), ISearchFragment,
|
|||
}
|
||||
|
||||
private fun refresh() {
|
||||
if (keyword == null) {
|
||||
if (keyword.isNullOrBlank()) {
|
||||
mRefreshLayout?.finishRefresh()
|
||||
return
|
||||
}
|
||||
TiebaApi.getInstance().searchUser(keyword!!).enqueue(object : Callback<SearchUserBean> {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
package com.huanchengfly.tieba.post.utils
|
||||
|
||||
import android.view.KeyEvent
|
||||
import android.view.View
|
||||
|
||||
private class KeyEventManager<V : View> : View.OnKeyListener {
|
||||
private val keyEventMapping = mutableMapOf<Int, ((V) -> Unit)>()
|
||||
|
||||
override fun onKey(v: View, keyCode: Int, event: KeyEvent?): Boolean {
|
||||
if (event?.action == KeyEvent.ACTION_UP && keyEventMapping.containsKey(keyCode)) {
|
||||
keyEventMapping[keyCode]?.invoke(v as V)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun bindKeyEvent(keyCode: Int, action: (V) -> Unit) {
|
||||
keyEventMapping[keyCode] = action
|
||||
}
|
||||
}
|
||||
|
||||
fun <V : View> V.bindKeyEvent(keyCode: Int, action: (V) -> Unit) {
|
||||
val keyEventManager: KeyEventManager<V>
|
||||
if (onKeyListener !is KeyEventManager<*>) {
|
||||
keyEventManager = KeyEventManager()
|
||||
setOnKeyListener(keyEventManager)
|
||||
} else {
|
||||
keyEventManager = onKeyListener as KeyEventManager<V>
|
||||
}
|
||||
keyEventManager.bindKeyEvent(keyCode, action)
|
||||
}
|
||||
|
||||
fun <V : View> V.bindKeyEvent(keyCodes: List<Int>, action: (V) -> Unit) {
|
||||
val keyEventManager = getKeyEventManager()
|
||||
keyCodes.forEach {
|
||||
keyEventManager.bindKeyEvent(it, action)
|
||||
}
|
||||
}
|
||||
|
||||
private val View.onKeyListener: View.OnKeyListener?
|
||||
get() {
|
||||
return runCatching {
|
||||
val viewClazz = View::class.java
|
||||
val listenerInfoClazz = Class.forName("android.view.View.ListenerInfo")
|
||||
val getListenerInfoMethod = viewClazz.getDeclaredMethod("getListenerInfo")
|
||||
val mOnKeyListenerField = listenerInfoClazz.getDeclaredField("mOnKeyListener")
|
||||
getListenerInfoMethod.isAccessible = true
|
||||
mOnKeyListenerField.isAccessible = true
|
||||
val listenerInfo = getListenerInfoMethod.invoke(this)
|
||||
mOnKeyListenerField.get(listenerInfo) as View.OnKeyListener?
|
||||
}.getOrNull()
|
||||
}
|
||||
|
||||
private fun <V : View> V.getKeyEventManager(): KeyEventManager<V> {
|
||||
return if (onKeyListener !is KeyEventManager<*>) {
|
||||
KeyEventManager<V>().also { setOnKeyListener(it) }
|
||||
} else {
|
||||
onKeyListener as KeyEventManager<V>
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue