在方法之外使用方法级变量

时间:2017-10-25 15:30:00

标签: java android variables

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

但是,我需要在我的类中使用变量才能使用它们进行计算(在方法之外)。有没有办法重新宣布"方法之外的这些变量可以使用吗?

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

  • int year
  • 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);
           }  

正如您所看到的,我正在尝试获取用户输入的日期,以便我可以在计算中使用该类,而不是类。

由于

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

如果要修改onDateSet()方法中的参数值(例如将{1添加到monthOfYear),然后使用它们来设置文本视图(就像我在代码片段中看到的那样) ,你可以这样做:

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()方法,并将返回的String设置为textview,如下所示:

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;
}

答案 2 :(得分:0)

您无法访问方法外部的匿名类方法范围变量。但是您可以对类范围使用相同的变量名称。像这样:

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);
}