【问题标题】:Can't get an AlertDialog to work无法让 AlertDialog 工作
【发布时间】:2010-11-10 19:10:15
【问题描述】:

我有一个 onLongClickListener 在调用时会重置一些值。 我想添加一个 alertDialog 来检查用户是否真的想要重置所有值。但是我不喜欢让它工作。

重置部分可以自己正常工作,但如果我尝试添加 AlertDialog,我会收到以下错误:

此行有多个标记 - 构造函数 AlertDialog.Builder(new View.OnLongClickListener(){}) 是 不明确的 - 断点:SatFinder [line: 174] - onLongClick(View)

这究竟是什么意思,我该如何解决? 非常感谢。

下面是代码部分。请注意,警报在此示例中没有任何用处。解决上述错误后,我将更改它。

    resetAll = new OnLongClickListener() {

   @Override
   public boolean onLongClick(View v) {

    AlertDialog.Builder alertbox = new AlertDialog.Builder(this);

       // set the message to display
       alertbox.setMessage("This is the alertbox!");

       // set a positive/yes button and create a listener
       alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'Yes' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       // set a negative/no button and create a listener
       alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'No' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       alertbox.show();

    // Resets all values and radio buttons
    pos1_deg.setText("0.0");
    pos2_deg.setText("0.0");
    pos1_az.setText("0.0");
    pos2_az.setText("0.0");
    targetDeg.setText("0.0");
    blurg.setText("----");

    radio1.setChecked(false);
    radio2.setChecked(false);
    radio3.setChecked(false);
    radio1E.setChecked(true);
    radio2E.setChecked(true);
    radio3E.setChecked(true);

    Toast.makeText(getApplicationContext(), 
      "Reset", Toast.LENGTH_LONG).show();

    return true;
   }

};

【问题讨论】:

  • 没有线标记,这有点难;哪一行是 174?

标签: android android-alertdialog


【解决方案1】:

问题在于这行代码:

AlertDialog.Builder alertbox = new AlertDialog.Builder(this);

实际上是在实现接口OnLongClickListener的匿名内部类内部。 AlertDialog.Builder() 构造函数的参数必须是 Context 对象。 this这里作为参数,指的是匿名内部类对象,不扩展Context。我猜您发布的代码片段在 Activity 对象内,在这种情况下,将行更改为:

AlertDialog.Builder alertbox = new AlertDialog.Builder(OuterClass.this);

其中 OuterClass 是该方法所在的 Activity 类的名称。这是用于引用定义内部类的对象的语法。

【讨论】:

  • 很好的解释,我希望 OP 能够确定他的代码和链接的解决方案代码之间的区别,自己找出答案。
  • 我没有看你的链接,但你是对的,它也解决了问题。 IMO 此类社区的意义不仅在于帮助某人解决问题,还在于将解决方案包含在网站中以供将来搜索,而不仅仅是指向外部资源的链接。
【解决方案2】:
AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getContext());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2014-12-26
    • 2017-12-22
    • 2012-02-28
    • 2015-12-01
    相关资源
    最近更新 更多