DialogPicker中的错误或错误

时间:2014-04-10 09:18:08

标签: android datepickerdialog

我有一个edittext,当点击edittext时,它会显示一个DialogPicker。

我的对象:

static final int DATE_DIALOG_ID = 1;
private EditText txtDate;
private EditText tambah;

这里是我的代码:

txtDate = (EditText) rootView.findViewById(R.id.tanggal);
txtDate.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            DialogFragment newFragment = new DialogFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            //newFragment.setTxtDate(txtDate);
            newFragment.show(ft, "dialog");
            return true;

        }
    });

public static class SomeDialog extends DialogFragment {
    final Calendar c = Calendar.getInstance();
    private String[] arrMonth = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);
    EditText txtDate;
    DatePickerDialog a;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (a == null) {
            a = new DatePickerDialog(
                    getActivity(), mDateSetListener, mYear, mMonth, mDay);
        }
      return a;
  }
    public void setTxtDate(EditText a){
        txtDate = a;
    }
    public DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener()
            { 
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                String sdate = arrMonth[mMonth] + " " + LPad(mDay + "", "0", 2) + ", " + mYear;
                SomeDialog.this.txtDate.setText(sdate);                    
            }
            protected String LPad(String schar, String spad, int len) {
                String sret = schar;
                for (int i = sret.length(); i < len; i++) {
                    sret = spad + sret;
                }
                return new String(sret);
            }
        };
}   

当我点击edittext时,datepicker将显示更多一次。我怎么修复它?只是信息,我在这段代码中使用了一个片段。谢谢你的回答。

1 个答案:

答案 0 :(得分:2)

它不是Bug。 onTouchListenr多次致电EditText。比如MotionEvent.ACTION_DOWN and MotionEvent.ACTION_UP时。 所以你需要改变你的代码,如

public boolean onTouch(View arg0, MotionEvent arg1) {
    if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
        DialogFragment newFragment = new DialogFragment();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        // newFragment.setTxtDate(txtDate);
        newFragment.show(ft, "dialog");
    }
    return true;
}