【问题标题】:Calling a Dialog From A Non Activity Class? [closed]从非活动类调用对话框? [关闭]
【发布时间】:2014-06-01 10:57:23
【问题描述】:

我正在尝试从像这样的另一个类中调用对话框

public void alertbox() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);    
    builder.setMessage("Blah").setCancelable(false);
    setNeutralButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        }); 
    AlertDialog alert = builder.create(); alert.show();
}

我正在课堂上调用此方法,但我的应用程序崩溃了,谁能告诉我为什么?

【问题讨论】:

  • 您需要App context 才能显示此Alert Dialog。将context 传递给您的alertbox(context)

标签: java android


【解决方案1】:

您需要 Application context 才能从单独的类中显示此 Alert Dialog。有两种方法可以实现这一点。

  1. 直接将context 传递给您的alertbox(context) 方法

  2. 创建一个single argument constructor 并在其上传递context。

在下面我看到你以第二种方式将context 传递给single argument constructor 喜欢。

public class AlertMessages {
    Context context;

    public AlertMessages(Context con) {
        this.context=con;
    }

    public void alertbox() {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);            
        builder.setMessage("Blah")
                .setCancelable(false)
                .setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    }); 
        AlertDialog alert = builder.create(); 
        alert.show();
    } 
}

然后,像这样在 Activity 中使用这个 AlertMessages 类:

AlertMessages msg = new AlertMessages(youractivity.this);
msg.alertbox();

【讨论】:

  • 但我想调用 AlertMessages msg = new AlertMessages(youractivity.this); msg.alertbox();从非活动类它不工作
  • @AliJafar 这是不可能的。您必须有 App 上下文才能显示 AlertDialog。
  • 那么没有其他方法可以显示非活动类的对话框吗?
  • @AliJafar 没有。我已经告诉过你,你必须有应用程序上下文才能显示警报对话框。
  • 我可以在这里使用 FragmentDialog 吗?如果是的话,我该如何使用它?
【解决方案2】:

使用这个表格:

new AlertDialog.Builder(this)
.setTitle("MessageDemo")
.setMessage("eek!")
.setNeutralButton("Close", new DialogInterface.OnClickListener()
{
 public void onClick(DialogInterface dlg, int sumthin)
 {
  // do nothing – it will close on its own
 }
})
.show();

也是:

作为在 onCreateView() 中提供视图的替代方法,您可以覆盖 onCreateDialog() 并提供一个对话框实例。下面的代码提供了示例代码 这种方法。

下面的代码。覆盖 DialogFragment 的 onCreateDialog()

MyDialogFragment
 {
    .....other functions
   @Override
   public Dialog onCreateDialog(Bundle icicle)
    {
       AlertDialog.Builder b = new AlertDialog.Builder(getActivity())
      .setTitle("My Dialog Title")
      .setPositiveButton("Ok", this)
      .setNegativeButton("Cancel", this)
      .setMessage(this.getMessage());
       return b.create();
    }
    .....other functions
 }

【讨论】:

  • 没用我仍然无法从非活动类调用对话框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多