【问题标题】:Using method-level Variables outside of the method在方法之外使用方法级变量
【发布时间】:2017-10-25 15:30:00
【问题描述】:

我正在尝试使用在日期选择器的 OnClick 方法中声明的变量。我理解因为这些变量是在方法级别声明的,所以它们只能在方法内部使用。

但是,我需要在我的类中使用变量来执行计算(这在方法之外)。有没有办法在方法之外“重新声明”这些变量以便可以使用它们?

我需要重复使用的变量是:

  • 整数年
  • int monthOfYear
  • int dayOfMonth

这是我的代码:

 tv.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() {

           @Override
           public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
             monthOfYear = monthOfYear + 1;
             String Sd = String.valueOf(dayOfMonth + "/" + monthOfYear + "/" + year);
             tv.setText(Sd);
           }  

如您所见,我正在尝试获取用户输入的日期,以便我可以在类的计算中使用它。

谢谢

【问题讨论】:

  • 这个问题已经有人问过了。我想你只是想看看如何声明变量。
  • 我知道如何声明变量,但我想从该方法中提取上述变量并在其他地方使用它们。但是,一旦我在方法之外声明它们,Android 就无法识别它们
  • @TheAlmac2 没有“提取”变量之类的东西。您应该将它们的值作为参数传递给进行计算的方法(或者如果您想稍后进行计算,则将值存储到字段中)。
  • 是的,我正在尝试将它们作为参数传递给方法,但 Android 没有接收它们?同样,当我尝试将它们存储为方法之外的字段时,它也无法识别它们。你能修改我的代码给我看>

标签: java android variables


【解决方案1】:

只需将值传递给类级方法,例如:

methodA() {
    tv.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
                    monthOfYear = monthOfYear + 1;
                    String Sd = String.valueOf(dayOfMonth + "/" + monthOfYear + "/" + year);
                    tv.setText(Sd);
                    methodB(year, monthOfYear, dayOfMonth);
                }  
            }
        }
    }
}

methodB(int year, int month, int day) {
    //use values
}

【讨论】:

    【解决方案2】:

    您不能访问方法之外的匿名类方法范围变量。但是您可以在类范围内使用相同的变量名。像这样的:

    private int year, monthOfYear, dayOfMonth;
    
    private void yourMethod() {
      ...
      tv.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View view) {
              DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() {
    
                 @Override
                 public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
                   monthOfYear = monthOfYear + 1;
                   String Sd = String.valueOf(dayOfMonth + "/" + monthOfYear + "/" + year);
                   tv.setText(Sd);
                 }
    }
    

    然后你需要在你的方法中设置变量值:

    @Override
    public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
    
      // Set the variables value here:
      YourClass.this.year = year;
      YourClass.this.monthOfYear = monthOfYear;
      YourClass.this.dayOfMonth = dayOfMonth;
    
      monthOfYear = monthOfYear + 1;
      String Sd = String.valueOf(dayOfMonth + "/" + monthOfYear + "/" + year);
      tv.setText(Sd);
    }
    

    【讨论】:

      【解决方案3】:

      如果你想修改onDateSet() 方法中的参数值(比如在monthOfYear 中加1),然后用它们来设置一个文本视图(就像我在代码sn-p 中看到的那样),你可以这样做:

      private void setListener() {
           tv.setOnClickListener(new View.OnClickListener() {
      
                  @Override
                  public void onClick(View view) {
                      DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() {
      
                          @Override
                          public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
      
                              int updatedMonthOfYear = monthOfYear + 1;
                              String sd = dayOfMonth + "/" + updatedMonthOfYear + "/" + year;
                              tv.setText(sd);
                          } 
                      }
                  }
           }
      }
      

      如果你想在它之外访问onDateSet()方法的参数,因为你想使用你写的计算方法,你可以将onDateSet()方法的参数传递给那个performCalculation()方法,并将返回的字符串设置为文本视图,如下所示:

      private void setListener() {
               tv.setOnClickListener(new View.OnClickListener() {
      
                      @Override
                      public void onClick(View view) {
                          DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() {
      
                              @Override
                              public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
      
                                  yearParam = year;
                                  dayOfMonthParam = dayOfMonth
                                  monthParam = monthOfYear + 1;
      
                                  String Sd = performCalculation(year, monthOfYear + 1, dayOfMonth);
                                  tv.setText(Sd);
                              } 
                          }
                      }
               }
      }
      
      private String performCalculation(int year, int month, day) {
          String sd;
          // perform some calculation using the parameters...
          return sd;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-27
        • 2023-04-01
        • 2012-07-10
        • 2013-03-10
        • 1970-01-01
        • 2016-04-18
        • 2016-08-27
        • 2020-09-01
        • 2018-07-23
        相关资源
        最近更新 更多