editText1的OnKey事件为什么执行两次Toast?怎么可以避免

ilove8 2013-10-02 09:48:27

当editText1空值时回车键,提示不能为空,但是为什么每次显示两次提示,跟踪了一下,该onKey事件执行两次.
主要代码如下

editText1.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
boolean bRet = false;
String s = editText1.getText().toString();
if(arg1==KeyEvent.KEYCODE_ENTER){
if(s.length() == 0){
ShowToast("不能为空");

bRet = true;
}
}
return bRet;
}
});


edit1Text文本控件下面还有个edit2Text

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<EditText
android:id="@+id/editText1"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:ems="10" >

<requestFocus />
</EditText>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<EditText
android:id="@+id/editText2"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:ems="10" />

</LinearLayout>


如何避免两次提示?谢谢
...全文
190 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilove8 2013-10-07
  • 打赏
  • 举报
回复
结贴! !
ilove8 2013-10-07
  • 打赏
  • 举报
回复
if(arg1==KeyEvent.KEYCODE_ENTER && arg2.getAction() == KeyEvent.ACTION_UP)
有效果,谢谢啊 你QQ号多少加你一下.
tantahe 2013-10-02
  • 打赏
  • 举报
回复
点击一次回车键,KeyEvent.ACTION_DOWN和KeyEvent.ACTION_UP都触发了View.OnKeyListener(),所以Toast显示了两次。你可以把
if(arg1==KeyEvent.KEYCODE_ENTER)
改成
if(arg1==KeyEvent.KEYCODE_ENTER && arg2.getAction() == KeyEvent.ACTION_DOWN)
或者
if(arg1==KeyEvent.KEYCODE_ENTER && arg2.getAction() == KeyEvent.ACTION_UP)
这样就只在按下ENTER键或者松开ENTER键的时候显示Toast。 你也可以根据需要改成按下和松开的时候,Toast分别显示不同的字串。

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧