字符串不能 return 到前一个 activity 并插入到它的 editText

String cannot be return to previous activity and insert to its editText

我遇到了一个关于将字符串从另一个 activity 获取到主 activity 的有趣问题。

程序: 1. 用户点击editText触发日历显示DatePickerDialog

  1. 一旦用户选择的日期有效,它return是一个字符串并设置在editText上,然后点击提交按钮将发送到activity_confirm。

  2. 当用户单击 "Edit" 按钮时,activity_confirm 将 return 所有值并通过 dataHolder 将这些数据发送到 Main activity在那些 editText 上的片段和 setText。

我可以正确获取除DOB之外的所有值,我想知道为什么它在activity_confirm上会return null,而在它的TextView上会设置Text(),是片段的方法存在错误吗?但是我很困惑。

感谢您的帮助或建议。

主要activity:

 btn_Click.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            ......
            //Get from fragment and intent to activity_confirm
            extras.putString("confirmDOB", strDOB);
            ......
        }
 }

片段:

......
TextInputLayout DOBpicker;
EditText DOB;
Calendar myCalendar = Calendar.getInstance();
......

    final DatePickerDialog.OnDateSetListener date = (new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar checkValid = new GregorianCalendar(year, monthOfYear, dayOfMonth);
                Calendar minAdultAge = new GregorianCalendar();
                minAdultAge.add(Calendar.YEAR, -18);
                if (minAdultAge.before(checkValid)) {
                    //Snackbar.make(correspondence, "Applicant's Date of birth cannot be 18 or below.", Snackbar.LENGTH_LONG).show();
                    DOBpicker.setErrorEnabled(true);
                    DOBpicker.setError("Applicant's Date of birth cannot be 18 or below.");
                    strDOB = "";
                    DOB.setText(strDOB);
                    insureApplicant2.put(1, strDOB);
                    DOBpicker.clearFocus();
                } else {
                    DOBpicker.setErrorEnabled(false);
                    myCalendar.set(Calendar.YEAR, year);
                    myCalendar.set(Calendar.MONTH, monthOfYear);
                    myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    updateLabel();
                }
            }
        });

        DOB.setOnFocusChangeListener(new View.OnFocusChangeListener(){
            @Override
            public void onFocusChange(View view, boolean isFocus){
                if(isFocus){
                    new DatePickerDialog(getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT, date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                }
            }
        });
    private void updateLabel(){
        String myFormat = "dd/MM/yyyy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        DOB.setText(sdf.format(myCalendar.getTime()));
        strDOB = DOB.getText().toString().trim();
        insureApplicant2.put(1, strDOB);
        passToActivity2("DOB", DOB.getText().toString().trim());
    }

activity_confirm:

//onCreate()
......
    if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if(extras != null) {
            ......
            strDOB = extras.getString("ConfirmDOB");
            //Log.e("getStringDate", String.valueOf(extras.getString("confirmDOB"))); //can get value
            ......
            DOB.setText(strDOB);
            //DOB.setText(String.valueOf(extras.getString("ConfirmDOB")));  
            //DOB.setText(strDOB);
            //All return null ?!
            ......
        } else {
            ......
            DOB = null;
        }
    }
......
//End of onCreate()

......
btn_editInfo.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view){
            ......
            dataHolder.setDob(strDOB);
            ......
            //intent to main activity
        }
    });
......

dataHolder(存储 get/set 的那些 editText 值):

public class fragment_data_holder {
    private static data_holder mInstance;
    ......
    private String dob;
    ......

    public static data_holder getmInstance(){
        if (mInstance == null) {
            return mInstance = new data_holder();
        } else {
            return mInstance;
        }
    }

    //Getter and Setter
    ......
    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }
}

你的拼写不一样。在 MainActivity 上是 "confirmDOB" 而在 activity_confirm 上是 "ConfirmDOB"