[英]Android OnClickListener only triggered on second click
我的 OnClickListener 只會在第二次點擊時被調用。 同一 View 的 OnLongClickListener 按預期工作。 我嘗試使用 OnTouchListener 代替,但在滑動時顯然會觸發。
我的偵聽器是我在活動中實現的接口的抽象方法:
interface OnVocableFlashcardFragmentInteractionListener {
fun onEditTextLongClick(view: View): Boolean
fun onEditTextClick(view: View)
}
我在我的 RecyclerViewAdapter 類中像這樣設置我的視圖的偵聽器:
init{
setHasStableIds(true)
mEditTextOnClickListener = View.OnClickListener {
mListener.onEditTextClick(it)
}
mEditTextOnLongClickListener = View.OnLongClickListener {
mListener.onEditTextLongClick(it)
}
}
override fun onBindViewHolder(holder: FlashcardViewHolder, position: Int) {
...
editText.let { it.tag = it.keyListener; it.keyListener = null; }
editText.setOnClickListener(mEditTextOnClickListener)
editText.setOnLongClickListener(mEditTextOnLongClickListener)
...
}
我的活動中偵聽器的實現如下所示:
override fun onEditTextClick(view: View) {
//-- only show toast if view is not editable (becomes editable on LongClick)
if ((view as EditText).keyListener == null) {
if (mToast != null) {
mToast!!.cancel()
}
//-- inform user to long press to edit entry
mToast = Toast.makeText(this, resources.getString(R.string.long_click_to_edit), Toast.LENGTH_LONG)
mToast!!.show()
}
}
override fun onEditTextLongClick(view: View): Boolean {
//-- I saved the KeyListener in the editTexts tag attribute
//-- to make it clickable again when needed
(view as EditText).keyListener = view.getTag() as KeyListener
showSoftKeyboard(view)
return true
}
我的視圖的 XML 如下所示:
<EditText
android:id="@+id/et_vocable_word"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="@null"
android:textStyle="bold"
android:hint="@string/enter_word"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:maxLines="1"
android:singleLine="true" />
視圖的父級及其父級未聲明為android:focusable="true"
或android:clickable="true"
在我的 AndroidManifest.xml 中,我為我的活動設置了android:windowSoftInputMode="stateHidden"
以防止 SoftInput 在活動開始時出現。
我做錯了什么,或者為什么 OnClickListener 只在第二次點擊時被調用? 有沒有人有我如何解決問題的想法?
您必須將編輯文本可聚焦屬性設為 false,因為其默認值為 auto,這意味着框架確定它必須為 true 和 false。當您第一次觸摸時為 true 時,它已被鍵盤聚焦。
https://developer.android.com/reference/android/R.styleable#View_focusable
我能夠通過使用 OnTouchListener 而不是 OnClickListener 來實現所需的行為,如下所示:
override fun onEditTextTouch(editText: EditText, event: MotionEvent): Boolean {
//-- if the pressed gesture has finished
if (event.action == MotionEvent.ACTION_UP)
//-- only show toast if view is not editable (becomes editable on LongClick)
if (editText.keyListener == null) {
if (mToast != null) {
mToast!!.cancel()
}
//-- inform user to long press to edit entry
mToast = Toast.makeText(this, resources.getString(R.string.long_click_to_edit), Toast.LENGTH_LONG)
mToast!!.show()
}
return false
}
在我之前嘗試用 touchListener 替換我的 clickListener 時,我忘記檢查(event.action == MotionEvent.ACTION_UP)
所以我的代碼在滑動時也被執行(我不想要)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.