在另一个对话框的单击事件中创建对话框时出现问题

Problem in Creating dialog box in click event of another dialog box

提问人:bejoy george 提问时间:7/14/2011 更新时间:7/14/2011 访问量:304

问:

我喜欢在另一个对话框的单击事件中显示一个对话框。我的代码在下面给出。但它显示一个错误 - 标记 “)”, ;预期,标记 “)” 上的语法错误, ;预期。任何人都可以清除这个问题吗

final CharSequence[] PhoneModels = {“发布日期”, “类别”, “金额”}; final AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); alt_bld.setTitle(“选择一个选项”);

      alt_bld.setSingleChoiceItems(PhoneModels, -1, new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int item) {

      //UpdateDisplay();
          //   dialog.dismiss();

          getApplicationContext();
          if(PhoneModels[item]=="Pub Date")
               {@Override
              protected Dialog onCreateDialog(int id)
               {
                   Calendar c = Calendar.getInstance();
                   int cyear = c.get(Calendar.YEAR);
                   int cmonth = c.get(Calendar.MONTH);
                   int cday = c.get(Calendar.DAY_OF_MONTH);
                   switch (id) {
                   case DATE_DIALOG_ID:
                   return new DatePickerDialog(this,  mDateSetListener,  cyear, cmonth, cday);
                   }
                   return null;
                   }
               private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
                  // onDateSet method
                  public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                  String date_selected = String.valueOf(monthOfYear+1)+" /"+String.valueOf(dayOfMonth)+" /"+String.valueOf(year);
                  Toast.makeText(ExampleApp.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                  }
                  };

              Toast.makeText(getApplicationContext(), " will be here", Toast.LENGTH_SHORT).show();
                 }
          else if(PhoneModels[item]=="Catagory")
                     {Toast.makeText(getApplicationContext(), " will not be here", Toast.LENGTH_SHORT).show();
                        }
          else
                       {Toast.makeText(getApplicationContext(), "It will be here", Toast.LENGTH_SHORT).show();
                          }
      }
      });

      AlertDialog alert = alt_bld.create();
      alert.show();

    // display UI

}
java android-alertdialog

评论


答:

1赞 Jon Skeet 7/14/2011 #1

如果您显示错误发生的位置(并正确缩进代码),那确实会有所帮助,但这肯定看起来像是您的问题之一

if(PhoneModels[item]=="Pub Date")
{@Override
    protected Dialog onCreateDialog(int id)

你不能在主体中声明一个方法,这有点像是有条件地覆盖。if

您似乎还尝试在方法中声明私有变量,这也不是有效的。

老实说,很难确切地理解你的代码要做什么——在另一个匿名的内部类中创建一个匿名的内部类在这方面确实没有帮助。你能把你的匿名内部类提取到“普通”类中吗(如果有帮助的话,可能仍然是内部类)?

另外,请注意,在 Java 中使用的比较字符串几乎总是不正确的。它将比较引用,而不是检查字符串是否相等。==

评论

0赞 bejoy george 7/14/2011
你是绝对正确的,这是我在代码中的错误。但是,有没有其他方法可以在另一个警报对话框的单击事件中显示日期选择器警报对话框?
0赞 Jon Skeet 7/14/2011
@bejoy:每当你使用匿名内部类时,都有另一种选择。目前还不清楚你想做什么,或者为什么你用无效的 Java 来尝试实现它......
0赞 bejoy george 7/14/2011
我正在生成一个带有 3 个单选按钮的警报对话框。如果用户选择pubdate,我想显示一个日期选择器对话框,并根据该日期我想执行另一个过程。
0赞 Jon Skeet 7/14/2011
@bejoy:是的,所以你需要在某些情况下采取新的行动——但这并不意味着有条件地覆盖一个方法。这意味着执行一些代码
0赞 bejoy george 7/14/2011
如何执行此任务。我必须在此代码中进行哪些更改。
0赞 powerMicha 7/14/2011 #2

您正在尝试在块中定义方法。这在 Java 中是不可能的。

看:

if(PhoneModels[item]=="Pub Date")
{
  @Override
  protected Dialog onCreateDialog ... // this is not allowed!

评论

1赞 Jon Skeet 7/14/2011
@Eng.Fouad:因为它不是首字母缩略词。绝对没有理由把它全部放在大写字母中,它只是看起来很笨拙。