Android 选项菜单两种情况都会执行
在我的登录活动中,我在选项菜单上创建了两个按钮“登录”和“更改用户”。如果用户单击“更改用户”,则会从手机中删除数据。我将显示一个对话框,要求用户确认此操作 它似乎可以正常工作,直到用户注销一次,然后在用户名和密码文本视图中不输入任何凭据。如果用户单击“登录”按钮时这些名称为空,则会显示一条toast消息,显示“请输入有效名称”,但对话框也会显示询问用户是否要更改用户名称 我的问题是,当此代码不在选项菜单的登录案例中时,为什么会显示一个对话框,要求用户确认他们想要更改用户?这就像用户单击带有空字段的登录,然后执行更改用户代码一样。事先谢谢你,马特Android 选项菜单两种情况都会执行,android,android-optionsmenu,Android,Android Optionsmenu,在我的登录活动中,我在选项菜单上创建了两个按钮“登录”和“更改用户”。如果用户单击“更改用户”,则会从手机中删除数据。我将显示一个对话框,要求用户确认此操作 它似乎可以正常工作,直到用户注销一次,然后在用户名和密码文本视图中不输入任何凭据。如果用户单击“登录”按钮时这些名称为空,则会显示一条toast消息,显示“请输入有效名称”,但对话框也会显示询问用户是否要更改用户名称 我的问题是,当此代码不在选项菜单的登录案例中时,为什么会显示一个对话框,要求用户确认他们想要更改用户?这就像用户单击带有空字
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Cursor allFromCompIdTable = nfcscannerapplication.loginValidate.queryAllFromCompanyIdTable();
if(allFromCompIdTable.getCount() > 0){
if(allFromCompIdTable.moveToLast()){
compId = allFromCompIdTable.getString(allFromCompIdTable
.getColumnIndex(LoginValidate.C_COMPANY_ID_OUTSIDE_APP_PURPOSES));
}
}
if(isAllowChangeUser.equalsIgnoreCase("false")){
if(item.getItemId() == R.id.changeuser)
item.setVisible(false);
}
switch (item.getItemId()) {
case R.id.login:
Log.e(TAG, "login clicked from opts menu");
theUsername = userName.getText().toString();
if(theUsername.trim().equalsIgnoreCase("")){
Toast.makeText(
EntryActivity.this,
"Please enter a valid name.",
Toast.LENGTH_LONG).show();
onCreate(sIs);
}else{
thePassword = passwordPin.getText().toString();
String loginType = "1";
if(isSavePassword.trim().equalsIgnoreCase("false")){
if( ! thePassword.trim().equalsIgnoreCase("")){
String[] params = new String[]{compId, theUsername, thePassword, loginType};
//validate user Asynchonously on background thread
AsyncValidateCarer avc = new AsyncValidateCarer();
avc.execute(params);
}else{
Toast.makeText(
EntryActivity.this,
"Please enter a valid password.",
Toast.LENGTH_LONG).show();
}
}else if(isSavePassword.trim().equalsIgnoreCase("true")){
Cursor c = nfcscannerapplication.loginValidate.queryAllFromCarer();
String firstNameFromDB = null;
String passwordFromDB = null;
String carerIdFromDB = null;
if(c != null && c.getCount() > 0){
c.moveToLast();
firstNameFromDB = c.getString(c.getColumnIndex(LoginValidate.C_CARER_FIRSTNAME));
passwordFromDB = c.getString(c.getColumnIndex(LoginValidate.C_PASSWORD));
carerIdFromDB = c.getString(c.getColumnIndex(LoginValidate.C_CARER_ID));
carerID = carerIdFromDB;
}else{
String[] params = new String[]{compId, theUsername, thePassword, loginType};
//validate user Asynchonously on background thread
AsyncValidateCarer avc = new AsyncValidateCarer();
avc.execute(params);
}
if(theUsername.trim().equalsIgnoreCase(firstNameFromDB) &&
thePassword.trim().equalsIgnoreCase(passwordFromDB)){
Intent intent2 = new Intent(EntryActivity.this,
NfcscannerActivity.class);
intent2.setAction(CUSTOM_QRCODE_ACTION);
intent2.putExtra("carerid", carerID);
startActivity(intent2);
}
}
return true;
}
case R.id.changeuser:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("Are you sure you want to change user? All call history and messages will be deleted.")
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Log.e(TAG, "change user button clicked");
nfcscannerapplication.loginValidate.deleteTableCarer();
nfcscannerapplication.loginValidate.deleteTableTransactions();
Toast.makeText(
EntryActivity.this,
"Carer logged out",
Toast.LENGTH_LONG).show();
EntryActivity.this.onCreate(sIs);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
添加
在您的switch语句的每个项目的末尾。在您的switch语句案例中发生了失败 一切正常,直到username.trim().equalsIgnoreCase(“”)计算为
true
。执行进入if块,绕过return语句,继续执行case R.id.changeuser:
case R.id.login:
Log.e(TAG, "login clicked from opts menu");
theUsername = userName.getText().toString();
if(theUsername.trim().equalsIgnoreCase("")){
Toast.makeText(
EntryActivity.this,
"Please enter a valid name.",
Toast.LENGTH_LONG).show();
onCreate(sIs);
}else{
谢谢,很好。我必须添加一个返回值true;在方法结束时,在2个案例块之外,在默认案例之后。
case R.id.login:
Log.e(TAG, "login clicked from opts menu");
theUsername = userName.getText().toString();
if(theUsername.trim().equalsIgnoreCase("")){
Toast.makeText(
EntryActivity.this,
"Please enter a valid name.",
Toast.LENGTH_LONG).show();
onCreate(sIs);
}else{