我的一个Android应用活动中有几个EditTexts。选择日期的工作完全正常,日期选择器对话框显示,您选择日期,然后在EditText中设置日期,没问题。
问题在于,当我稍后打开另一个EditText时,你只想提供一些文本(称为'leggtil'),日期选择器对话框再次出现!谁知道什么是错的?我将在此处显示所有相关代码:
private DatePickerDialog velgdato;
private SimpleDateFormat dateFormat;
private EditText dato;
private Calendar mycalendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lag_liste);
dato = (EditText)findViewById(R.id.laglistedato);
final EditText leggtil = (EditText)findViewById(R.id.laglisteadditem);
mycalendar = Calendar.getInstance();
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mycalendar.set(Calendar.YEAR, year);
mycalendar.set(Calendar.MONTH, monthOfYear);
mycalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
oppdater();
}
};
dato.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
new DatePickerDialog(LagListe.this, date, mycalendar.get(Calendar.YEAR), mycalendar.get(Calendar.MONTH), mycalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
leggtil.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (leggtil.getText().toString() != null) {
Toast.makeText(getApplicationContext(), leggtil.getText().toString(), Toast.LENGTH_SHORT).show();
return true;
}
else
return false;
}
});
}
private void oppdater() {
String format = "MM/dd/yy";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
dato.setText(sdf.format(mycalendar.getTime()));
}
答案 0 :(得分:1)
问题是你设置了onFocusChangeListener,每当Views焦点发生变化时(无论是焦点内还是焦点外)都会调用它。试试这个:
dato.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
new DatePickerDialog(LagListe.this, date, mycalendar.get(Calendar.YEAR), mycalendar.get(Calendar.MONTH), mycalendar.get(Calendar.DAY_OF_MONTH)).show();
}
}
});
答案 1 :(得分:0)
在第二个EditText上单击日期选择器显示,因为从第一个EditText中删除焦点时调用了setOnFocusChangeListener
方法。
在onFocusChange
内添加if条件,并仅在焦点位于First EditText上时显示日期选择器,如更改onFocusChange
方法:
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(v.getId()==R.id.laglistedato){
new DatePickerDialog(LagListe.this, date,
mycalendar.get(Calendar.YEAR),
mycalendar.get(Calendar.MONTH),
mycalendar.get(Calendar.DAY_OF_MONTH)).show();
}else{
// do nothing...
}
}