我正在尝试使用在日期选择器的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);
}
正如您所看到的,我正在尝试获取用户输入的日期,以便我可以在计算中使用该类,而不是类。
由于
答案 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);
}