我有一个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将显示更多一次。我怎么修复它?只是信息,我在这段代码中使用了一个片段。谢谢你的回答。
答案 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;
}