如何从另一个内部 class 获取变量以供全局使用
How to get variable from another inner class for globally use
这是我的代码。其中有一个名为 BirthDatePickerFragment
的内部 class。我想在 BirthDatePickerFragment
.
下全局调用 birthYear
、birthMonth
、birthDay
变量形式的 onCreateDialog
方法
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button birthDatePickerButton;
TextView calculateTextView;
EditText birthDayDatePickerEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
birthDatePickerButton = findViewById(R.id.birthDatePickerBT);
birthDayDatePickerEditText = findViewById(R.id.birthDayDatePickEditTextID);
calculateTextView=findViewById(R.id.calculateTextViewID);
birthDatePickerButton.setOnClickListener(this);
}
public void onClick(View v) {
// Initialize a new date picker dialog fragment
DialogFragment dFragment = new BirthDatePickerFragment();
// Show the date picker dialog fragment
dFragment.show(getFragmentManager(), "Date Picker");
}
public static class BirthDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int birthYear = calendar.get(Calendar.YEAR);
int birthMonth = calendar.get(Calendar.MONTH);
int birthDay = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
AlertDialog.THEME_TRADITIONAL, this, birthYear, birthMonth,birthDay);
return datePickerDialog;
}
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// Do something with the chosen date
EditText birthDatText=getActivity().findViewById(R.id.birthDayDatePickEditTextID);
// Create a Date variable/object with user chosen date
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
cal.set(year, month, dayOfMonth, 0, 0, 0);
Date chosenDate = cal.getTime();
// Format the date using style short
DateFormat df_short = DateFormat.getDateInstance(DateFormat.SHORT);
String df_short_str = df_short.format(chosenDate);
// Display the formatted date
birthDatText.setText(df_short_str);
}
您可以更简单地考虑您的代码。如果忽略外部 class 而只关注内部 class,您会发现 onCreateDialog()
是 class [=11= 的 public 方法] 并且它 returns 一个 Dialog
对象。与在 Java 方法中创建的所有变量一样,它们在方法完成时被清除。
如果要获取 birthYear
、birthMonth
、birthDay
的值,则必须通过方法返回的 Dialog
对象访问它们。这可能是可能的,因为变量被传递到对象的构造函数中。
综上所述,我同意您应该首先考虑要做什么的评论,然后看看是否可以根据您的目的对代码进行不同的结构化。
这是我的代码。其中有一个名为 BirthDatePickerFragment
的内部 class。我想在 BirthDatePickerFragment
.
birthYear
、birthMonth
、birthDay
变量形式的 onCreateDialog
方法
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button birthDatePickerButton;
TextView calculateTextView;
EditText birthDayDatePickerEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
birthDatePickerButton = findViewById(R.id.birthDatePickerBT);
birthDayDatePickerEditText = findViewById(R.id.birthDayDatePickEditTextID);
calculateTextView=findViewById(R.id.calculateTextViewID);
birthDatePickerButton.setOnClickListener(this);
}
public void onClick(View v) {
// Initialize a new date picker dialog fragment
DialogFragment dFragment = new BirthDatePickerFragment();
// Show the date picker dialog fragment
dFragment.show(getFragmentManager(), "Date Picker");
}
public static class BirthDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int birthYear = calendar.get(Calendar.YEAR);
int birthMonth = calendar.get(Calendar.MONTH);
int birthDay = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
AlertDialog.THEME_TRADITIONAL, this, birthYear, birthMonth,birthDay);
return datePickerDialog;
}
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// Do something with the chosen date
EditText birthDatText=getActivity().findViewById(R.id.birthDayDatePickEditTextID);
// Create a Date variable/object with user chosen date
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
cal.set(year, month, dayOfMonth, 0, 0, 0);
Date chosenDate = cal.getTime();
// Format the date using style short
DateFormat df_short = DateFormat.getDateInstance(DateFormat.SHORT);
String df_short_str = df_short.format(chosenDate);
// Display the formatted date
birthDatText.setText(df_short_str);
}
您可以更简单地考虑您的代码。如果忽略外部 class 而只关注内部 class,您会发现 onCreateDialog()
是 class [=11= 的 public 方法] 并且它 returns 一个 Dialog
对象。与在 Java 方法中创建的所有变量一样,它们在方法完成时被清除。
如果要获取 birthYear
、birthMonth
、birthDay
的值,则必须通过方法返回的 Dialog
对象访问它们。这可能是可能的,因为变量被传递到对象的构造函数中。
综上所述,我同意您应该首先考虑要做什么的评论,然后看看是否可以根据您的目的对代码进行不同的结构化。