每次我按下进入,即使它不应该出来,吐司仍然会弹出...
对我的代码采取了很多措施:
etAddMove.setOnKeyListener(new OnKeyListener() {
@SuppressLint("NewApi")
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_ENTER && event.getRepeatCount() == 0){
String ssmoveName = etAddMove.getText().toString();
int x = ssmoveName.length() - 1;
if (ssmoveName.isEmpty() || Character.isWhitespace(ssmoveName.charAt(0)) || Character.isWhitespace(ssmoveName.charAt(x))) {
Toast.makeText(ListMovingNames.this,
"Please enter a valid name! Avoid giving a blank name or white space at the beginning or end of the name",
Toast.LENGTH_LONG).show();
}else{
try {
SQLHandler check = new SQLHandler(ListMovingNames.this);
check.open();
String scheck = check.checkMove(ssmoveName);
check.close();
if (!scheck.equals(ssmoveName)) {
Toast.makeText(ListMovingNames.this, "Move name already exist please give a different name", Toast.LENGTH_LONG).show();
} else{
SQLHandler entry = new SQLHandler(ListMovingNames.this);
entry.open();
entry.createMove(ssmoveName);
entry.setTodo(ssmoveName);
entry.close();
Intent i = new Intent(getApplicationContext(), StartMoving.class);
i.putExtra("moveName", ssmoveName);
startActivity(i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
SQLHandler entry = new SQLHandler(ListMovingNames.this);
entry.open();
entry.createMove(ssmoveName);
entry.setTodo(ssmoveName);
entry.close();
Intent i = new Intent(getApplicationContext(), StartMoving.class);
i.putExtra("moveName", ssmoveName);
startActivity(i);
}
}
return true;
}
return onKeyDown(keyCode, event);
}
});
如果我不想让它显示出来,你怎么能让这个家伙停下来......
修改
我想我知道为什么会发生这种情况,这一定是因为每次按下输入keyup并且keydown初始化这就是为什么第一次初始化是keydown,它调用条件并返回false,当调用keydown时,条件再次被调用这将返回true,使吐司显示。这就是我到目前为止所想的......
答案 0 :(得分:0)
尝试使用以下,如果不工作,那么来了解。
Toast toast;
toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
if(Yourcondition)
{
toast.show();
}
else
{
//nothing to display
}
答案 1 :(得分:0)
最后解决这个糟糕的事。因为我怀疑toast一直显示的原因是每次按下回车键时都会调用keydown和keyup,这就是为什么两次调用进程会出现toast的原因,因为在调用进程时显示toast的条件是满足的第二次。
所以要避免KeyEvent.ACTION_DOWN
必须存在。
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if ( (event.getAction() == KeyEvent.ACTION_DOWN ) && (keyCode== KeyEvent.KEYCODE_ENTER) )
{
// do something here
}
return true;
}
答案 2 :(得分:-1)
使用此:
Toast toast;
toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT);
if(Yourcondition)
{
toast.show();
}
else
{
//nothing to display
}
在最后一个答案中,您正在使用.show
方法创建吐司。如果陈述是真的,它将显示偶数。
因此,请从
.show
toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
这句话。
这可能会有所帮助。