我遇到了一个关于将String从另一个活动转移到主要活动的兴趣问题。
程序: 1.用户单击editText以使用DatePickerDialog
触发日历显示一旦用户选择的日期有效,它将返回为String并在editText上设置,然后单击“提交”按钮将发送到activity_confirm。
当用户点击“编辑”按钮时,activity_confirm将返回所有值,并通过dataHolder将这些数据发送到主活动的片段和setText上的那些editText。
我可以正确地获取除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;
}
}
答案 0 :(得分:0)
你的拼写不同。在MainActivity
上,activity_confirm
上的“confirmDOB”是“ConfirmDOB”