gpt4 book ai didi

android - OnEditorActionListener 在 SenseUI 键盘上使用相同的 eventTime 调用了两次

转载 作者:IT老高 更新时间:2023-10-28 21:55:59 27 4
gpt4 key购买 nike

在我正在测试的一部手机(HTC Incredible、Android 2.2、软件 3.21.605.1)上,我遇到了以下行为。

在按下 Sense UI 键盘上的 Enter 键时(立即)调用了两次 onEditorAction 事件处理程序。

两次调用事件的 KeyEvent.getEventTime() 都是相同的,因此我采用了这种解决方法:

protected void onCreate(Bundle savedInstanceState) {
[...]

EditText text = (EditText)findViewById(R.id.txtBox);
text.setOnEditorActionListener(new OnEditorActionListener() {
private long lastCalled = -1;

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ( event.getEventTime() == lastCalled ) {
return false;
} else {
lastCalled = event.getEventTime();
handleNextButton(v);
return true;
}
}
});

[...]
}

EditText 定义为:

<EditText 
android:layout_width="150sp"
android:layout_height="wrap_content"
android:id="@+id/txtBox"
android:imeOptions="actionNext"
android:capitalize="characters"
android:singleLine="true"
android:inputType="textVisiblePassword|textCapCharacters|textNoSuggestions"
android:autoText="false"
android:editable="true"
android:maxLength="6"
/>

在我测试过的所有其他设备上,操作按钮被正确标记为“下一步”,并且该事件仅在按下该按钮时被调用一次。

这是 Sense UI 键盘中的错误,还是我做错了什么?

感谢您的帮助。


已更新 - 感谢给出的答案,我已确定以下内容作为我的检查。这在我可以测试的两部手机(Sense UI 和 Cyanogenmod CM7)上都可以正常工作

            if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}

if ( actionId != EditorInfo.IME_ACTION_NEXT && actionId != EditorInfo.IME_NULL ) {
return false;
}

最佳答案

正如米奇所说,你必须检查事件 Action :

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event == null || event.getAction() != KeyEvent.ACTION_DOWN)
return false;

// do your stuff

return true;
}

此代码段适用于 Sense UI 和模拟器。

关于android - OnEditorActionListener 在 SenseUI 键盘上使用相同的 eventTime 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com