簡體   English   中英

在方法之外使用方法級變量

[英]Using method-level Variables outside of the method

我正在嘗試使用在日期選擇器的OnClick方法中聲明的變量。 我知道因為這些變量是在方法級別聲明的,所以它們只能在方法內部使用。

但是,我需要使用我的類中的變量來對它們進行計算(這是在方法之外)。 有沒有辦法在方法之外“重新聲明”這些變量,以便它們可以使用?

我需要重用的變量是:

  • 整年
  • 整月
  • 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);
           }  

如您所見,我正在嘗試獲取用戶輸入的日期,以便我可以在類的計算中使用該日期。

謝謝

只需將值傳遞給類級方法,例如:

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
}

如果您想修改onDateSet()方法中的參數值(例如將 1 添加到monthOfYear ),然后使用它們來設置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()方法,並設置將字符串返回給文本視圖,如下所示:

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

您無法訪問方法之外的匿名類方法范圍變量。 但是您可以在類范圍內使用相同的變量名。 像這樣的東西:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM