我创建了一个Alert Dialog
,其中有两个EditText
和两个Button
,我获取EditText
的值,如果值匹配,那么我正在做一些操作否则我想再次调用AlertDialog
。但如果值不同,那么我无法调用相同的警报对话框。我不知道我在哪里做错了...
我的代码就像这样::
public class MainActivity extends Activity
{
private Button btn_click;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_click=(Button)findViewById(R.id.btn_click);
btn_click.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
showDialog(0);
}
});
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case 0:
// This example shows how to add a custom layout to an AlertDialog
android.app.AlertDialog.Builder login = new android.app.AlertDialog.Builder(this);
try
{
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.login_dialog, null);
final EditText username_alert = (EditText) textEntryView.findViewById(R.id.username);
final EditText password_alert = (EditText) textEntryView.findViewById(R.id.password);
login.setTitle("Login").setIcon(R.drawable.ic_launcher).setView(textEntryView)
.setPositiveButton("Login", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
/* User clicked OK so do some stuff */
String uname_alert=username_alert.getText().toString();
String pass_alert=password_alert.getText().toString();
if(uname_alert.equals("aaaa") && pass_alert.equals("aaaa"))
{
//do Something........
}
else
{
showDialog(0);
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
/* User clicked cancel so do some stuff */
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
return login.create();
}
return null;
}
}
希望我的问题很明确.......
请帮我 ..
在此先感谢..... :)
答案 0 :(得分:0)
在从对话框调用showDialog之前,你应该关闭现有的对话框吗?
答案 1 :(得分:0)
目前,您每次都在创建新对话框。
尝试将您创建的对话框保持为类级变量并重用它。喜欢:
第一次
对话框= login.create();
返回对话框;
下次再开始
仅返回对话框
答案 2 :(得分:0)
我认为您正试图在AlertDialog
内创建AlertDialog
这是不可能的。相反,您可以使用Toast
来显示提醒信息。
阅读这篇文章以了解自定义
AlertDialog
答案 3 :(得分:0)
问题在于操作顺序。在解除对话框之前,您的点击处理程序会调用showDialog()
,因此该调用不执行任何操作。然后在处理程序方法返回后立即AlertDialog
调用dismiss()
自身(默认行为)并消失。
此功能的更好实现是自定义AlertDialog
并在调用DialogInterface
处理程序之前拦截按钮单击,这样您就可以进行验证,而不是在这种情况下根本不关闭对话框,而不是试图让它再次出现。事实是AlertDialog
没有足够的能力处理这种情况,这里最好的解决方案是不要试图将方形钉固定到圆孔中,并且可能只做一个自定义的Dialog
实现来完成所有事情你需要。
答案 4 :(得分:0)
我知道这个answare迟到了。但对于未来的寻求者。 我有同样的问题,没有.hide()。show()和.dismiss()的组合没有反应。可能系统需要一些时间,然后才能正常工作。
if (!SDCartConnected())
{
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
public void run() {
showDialog(Const.DIALOG_SDCARD_MISSING);}}, 2000);
}