我想显示一个带OK按钮的消息框。我使用了以下代码,但它导致带有参数的编译错误:
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setMessage("This is an alert with no consequence");
dlgAlert.setTitle("App Title");
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);
dlgAlert.create().show();
我应该如何在Android中显示消息框?
答案 0 :(得分:71)
我认为您可能没有为ok正面按钮添加点击监听器。
dlgAlert.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//dismiss the dialog
}
});
答案 1 :(得分:28)
由于在您的情况下您只想通过简短的消息通知用户,Toast
可以提供更好的用户体验。
Toast.makeText(getApplicationContext(), "Data saved", Toast.LENGTH_LONG).show();
更新:现在建议使用Snackbar,而不是使用Toast for Material Design应用。
如果您有更长时间的消息要让读者有时间阅读和理解,那么您应该使用DialogFragment
。 (documentation目前建议将AlertDialog
包装在一个片段中,而不是直接调用它。)
创建一个扩展DialogFragment
的类:
public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("App Title");
builder.setMessage("This is an alert with no consequence");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// You don't have to do anything here if you just
// want it dismissed when clicked
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
然后在您的活动中需要时调用它:
DialogFragment dialog = new MyDialogFragment();
dialog.show(getSupportFragmentManager(), "MyDialogFragmentTag");
答案 2 :(得分:9)
答案 3 :(得分:3)
@Override
protected Dialog onCreateDialog(int id)
{
switch(id)
{
case 0:
{
return new AlertDialog.Builder(this)
.setMessage("text here")
.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
try
{
}//end try
catch(Exception e)
{
Toast.makeText(getBaseContext(), "", Toast.LENGTH_LONG).show();
}//end catch
}//end onClick()
}).create();
}//end case
}//end switch
return null;
}//end onCreateDialog