日期选择器重新打开错误的Edittext

时间:2016-05-09 19:05:59

标签: android datepicker android-edittext

我的一个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()));

}

2 个答案:

答案 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...
            }
        }