这个问题在这里已有答案:
在我的代码中,我正在尝试进行AlertDialog登录,但是一旦按下按钮我就无法关闭它,有人知道吗?我尝试从构建器创建一个AlertDialog对象,但它不起作用。这是我的代码:
public class MainActivity extends AppCompatActivity {
ImageButton login;
Button signin;
EditText user, password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
login = (ImageButton)findViewById(R.id.login);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.imagen_click));
createSigninDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
});
}
public AlertDialog createSigninDialog (){
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_signin, null);
builder.setView(view);
signin = (Button)view.findViewById(R.id.button_ingresar);
user = (EditText)view.findViewById(R.id.user_input);
password = (EditText)view.findViewById(R.id.password_input);
signin.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.imagen_click));
if (user.getText().toString().equals("1234567890") && password.getText().toString().equals("1234")){
Toast.makeText(MainActivity.this, "Login", Toast.LENGTH_SHORT).show();
//Dismiss here
} else {
Toast.makeText(MainActivity.this, "Datos incorrectos", Toast.LENGTH_SHORT).show();
//Dismiss here
}
}
}
);
return builder.show();
}
}
你的功能应该是这样的:
public AlertDialog createSigninDialog (){
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_signin, null);
builder.setView(view);
final AlertDialog dialog = builder.create();
signin = (Button)view.findViewById(R.id.singing);
user = (EditText)view.findViewById(R.id.user_input);
password = (EditText)view.findViewById(R.id.password_input);
signin.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (user.getText().toString().equals("1234567890") && password.getText().toString().equals("1234")){
Toast.makeText(MainActivity.this, "Login", Toast.LENGTH_SHORT).show();
//Dismiss here
dialog.dismiss();
} else {
Toast.makeText(MainActivity.this, "Datos incorrectos", Toast.LENGTH_SHORT).show();
//Dismiss here
dialog.dismiss();
}
}
}
);
return dialog;
}
然后你可以像这样调用它:
createSigninDialog().show();
你应该调用builder.create()
而不是调用builder.show()
。它会返回一个对话框实例,然后show()
和dismiss()
方法可以调用。