我正在使用AlertDialog
用户登录应用程序。我已经显示了输入用户名和密码的两个编辑视图,并且我在警告对话框中使用了正按钮和负按钮。当用户输入无效时用户名或密码然后单击确定我在与TexView相同的警报对话框中显示文本,但警报对话框正在关闭。如何保持警报对话框,直到用户输入编辑文本字段的有效详细信息?
我已经实现了获取警报的代码,如下所示:
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Login here");
alert.setView(table);
alert.setPositiveButton("Login", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
objLogin.setLoginUsrName(userNameText.getText().toString());
objLogin.setLoginPassword(passwordText.getText().toString());
if(objLogin.userValid())
{
//getting next screen
}
else{
invalid.setText("Invalid user name or password");
invalid.setTextColor(Color.RED);
//diaplay same alert here with invalid text
}
}
});
alert.setNegativeButton("Register", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//get register screen code here
}
});
alert.show();
如何在用户输入有效详细信息之前显示警报?
答案 0 :(得分:1)
我认为问题是来自AlertDialog类的positiveButton和negativeButton。按下这些后,AlertDialog关闭。使用Dialog Builder而不是AlertDialog可能会更好运,但我还没有测试过。
另一个修复:
尝试将两个Android小部件添加到“表格”布局中,并在其上设置onclicklistener。这样做而不是AlertDialog中的两个默认正/负按钮。此方法还允许您修改按钮的位置和样式。
答案 1 :(得分:1)
使用以下布局
创建自定义对话框 <?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/tableLayout1" android:gravity="center"
android:layout_width="200dip" android:layout_height="150dip"
xmlns:android="http://schemas.android.com/apk/res/android" >
<TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:gravity="center" >
<EditText android:text="" android:id="@+id/edusername"
android:layout_width="80dip" android:layout_height="50dip" android:inputType="textPassword"
android:singleLine="true" ></EditText>
</TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:gravity="center" >
<EditText android:text="" android:id="@+id/edconfirmpwd"
android:layout_width="80dip" android:layout_height="50dip" android:inputType="textPassword"
android:singleLine="true" ></EditText>
</TableRow>
<TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:gravity="center" >
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dip"
android:layout_marginTop="15dip"
android:padding="20dip"
android:text="@string/BtnOk" >
</Button>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginTop="15dip"
android:padding="20dip"
android:text="@string/cancelBtn" >
</Button>
</TableRow>
</TableLayout>
在活动中使用
final Dialog password = new Dialog(activity.this);
password.setContentView(R.layout.dialog);
password.setTitle("Enter your login ids");
final EditText getUsername = (EditText)password.findViewById(R.id.edUsername);
final EditText getPassword = (EditText) password
.findViewById(R.id.edconfirmpwd);
Button okButton = (Button) password.findViewById(R.id.ok);
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String password= getPassword.getText().toString();
String username = getUsername.getText().toString();
if (password.equals("yourText")&& username.equals("yourtext")) {
password.dismiss();
}
} else {
Toast.makeText(getBaseContext(), "InvalidPassword",
Toast.LENGTH_SHORT).show();
password.show();
}
}
});
Button cancelButton = (Button) password.findViewById(R.id.cancel);
cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Entered on cancel button clicked");
password.dismiss();
}
});
password.show();
}
答案 2 :(得分:0)
您需要为包含两个按钮的AlertDialog
创建自定义视图,并将这些按钮用于正面和负面。
但如果用户未登录,则将startActivityForResult
调用到登录活动会更好。然后在onActivityResult
中,如果用户没有放入任何内容(选择取消,或者按回键),然后完成第一个启动的活动。在您进行的登录活动中,按下按钮将是相同的,如果登录信息正确,则您将调用finish
。
我曾经在我的应用中使用AlertDialog
进行登录。我现在使用上面提到的方法,我更喜欢它。