String无法返回到上一个活动并插入其editText

时间:2016-10-20 05:57:34

标签: java android android-edittext getter-setter android-calendar

我遇到了一个关于将String从另一个活动转移到主要活动的兴趣问题。

程序: 1.用户单击editText以使用DatePickerDialog

触发日历显示
  1. 一旦用户选择的日期有效,它将返回为String并在editText上设置,然后单击“提交”按钮将发送到activity_confirm。

  2. 当用户点击“编辑”按钮时,activity_confirm将返回所有值,并通过dataHolder将这些数据发送到主活动的片段和setText上的那些editText。

  3. 我可以正确地获取除DOB之外的所有值,我想知道为什么它会在activity_confirm上返回null而在TextView上的setText(),是否存在片段方法的错误?但我很困惑。

    感谢您的任何帮助或建议。

    主要活动:

     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;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

你的拼写不同。在MainActivity上,activity_confirm上的“confirmDOB”是“ConfirmDOB”