[英]Using method-level Variables outside of the method
我正在嘗試使用在日期選擇器的OnClick
方法中聲明的變量。 我知道因為這些變量是在方法級別聲明的,所以它們只能在方法內部使用。
但是,我需要使用我的類中的變量來對它們進行計算(這是在方法之外)。 有沒有辦法在方法之外“重新聲明”這些變量,以便它們可以使用?
我需要重用的變量是:
這是我擁有的代碼:
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.