从EditText到日历解析日期并根据

时间:2018-01-17 14:21:33

标签: java android

我知道有很多人问这个,但我似乎无法让它发挥作用。 我试图从editTextBirth中获取字符串并将其解析为日期并从中计算用户的年龄,将结果转换为editTextAge(我希望将其保留为EditText,而不是出于个人原因而使用TextView。)

这是我到目前为止所得到的:

public class AddPatientActivity extends AppCompatActivity implements View.OnClickListener{

private static final int DATE_DIALOG_ID = R.layout.birthdaypicker;
private EditText editTextName;
private EditText editTextBirth;
private EditText editTextAge;
private EditText editTextComp;
private SimpleDateFormat dateFormat;
private Calendar c = Calendar.getInstance();
private Calendar now = Calendar.getInstance();
private Button buttonCalc;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_patient);

    editTextName = (EditText) findViewById(R.id.editTextName);
    editTextAge = (EditText) findViewById(R.id.editTextAge);
    editTextBirth = (EditText) findViewById(R.id.editTextBirth);
    editTextComp = (EditText) findViewById(R.id.editTextComp);
    buttonCalc = (Button) findViewById(R.id.buttonCalc);

    dateFormat = new SimpleDateFormat("dd/MM/yyyy");


}

@Override
public void onClick(View view) {
    //if calc button is pressed
    if (view == buttonCalc) {
        String date = editTextBirth.getText().toString();
        try {
            c.setTime(dateFormat.parse(date));
            int age = now.get(Calendar.YEAR) - c.get(Calendar.YEAR);
            if (now.get(Calendar.DAY_OF_YEAR) < c.get(Calendar.DAY_OF_YEAR)) {
                age--;
            }
            String idade = Integer.toString(age);
            editTextAge.setText(idade);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

}

不幸的是,当我点击buttonCalc或将输入格式从ddMMyyyy(editTextBirth如何显示)更改为dd / MM / yyyy时,没有任何反应。

1 个答案:

答案 0 :(得分:2)

您创建了onClick事件,但从未将其明确指定给按钮。

在按钮声明下方添加此代码段:

SUBSTRING(9999...

@Pavneet_Singh也是正确的。您需要比较视图ID而不仅仅是按钮。

这是你的最终洗礼应该是这样的:

buttonCalc.setOnClickListener(this);

}