Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从另一个内部类获取变量以供全局使用_Java_Android Studio_Variables_Datepicker - Fatal编程技术网

Java 如何从另一个内部类获取变量以供全局使用

Java 如何从另一个内部类获取变量以供全局使用,java,android-studio,variables,datepicker,Java,Android Studio,Variables,Datepicker,这是我的密码。其中有一个名为BirthDatePickerFragment的内部类。我想从BirthDatePickerFragment下的onCreateDialog方法全局调用birthYear、birthMonth、birthMonth变量 MainActivity.java 您可以更简单地思考代码。如果忽略外部类而只关注内部类,您将看到onCreateDialog是类BirthDatePickerFragment的公共方法,它返回一个Dialog对象。与Java方法内部创建的所有变量一样

这是我的密码。其中有一个名为BirthDatePickerFragment的内部类。我想从BirthDatePickerFragment下的onCreateDialog方法全局调用birthYear、birthMonth、birthMonth变量

MainActivity.java


您可以更简单地思考代码。如果忽略外部类而只关注内部类,您将看到onCreateDialog是类BirthDatePickerFragment的公共方法,它返回一个Dialog对象。与Java方法内部创建的所有变量一样,当方法完成时,它们将被清除

如果您想获得birthYear、birthMonth和birth的值,您必须通过该方法返回的Dialog对象来访问它们。这可能是可能的,因为变量被传递到对象的构造函数中


不管怎么说,我同意您的意见,即您应该首先考虑您要做的事情,并查看代码的结构是否可以根据您的目的而有所不同。

为什么您需要“全局性”的代码?正如您所知,Java不支持全局变量Show我可以在另一个类中使用这3个变量吗?要么在另一个类中提供getter或setter,要么将它们声明为static,…非常感谢。我如何才能将它们声明为static?按照您现在的代码方式,您不能使用,因为它们似乎不是类中的变量,但是方法中的局部变量。如果您不知道如何将变量声明为静态变量,请停止您正在做的工作,首先尝试了解基本操作的原理。
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);


          }