我有一个适配器,其中使用开关盒生成动态形式。在所有情况下都可以使用,但在CASE:“ NepaliDate”的情况下,只能在第二次单击中设置日期。以下是我的情况:
case "NEPALI_DATE":
holder.et = new EditText(context);
list.add(holder.et);
holder.et.setInputType(InputType.TYPE_CLASS_DATETIME);
holder.sifarismainLayout.addView(holder.et);
holder.et.setFocusable(false);
holder.et.setCursorVisible(false);
holder.et.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
int current_month = now.get(Calendar.MONTH) +1;
Log.e("currMonth", String.valueOf(current_month));
if(current_month == 4 || current_month == 5 || current_month == 6 || current_month == 7 ||
current_month == 8 || current_month == 9 || current_month == 10 ||
current_month == 11 || current_month == 12) {
com.hornet.dateconverter.DatePicker.DatePickerDialog dpd = com.hornet.dateconverter.DatePicker.DatePickerDialog.newInstance(chooseSifarisAdapter.this, now.get(Calendar.YEAR) + 57, now.get(Calendar.MONTH) - 3,
now.get(Calendar.DAY_OF_MONTH));
dpd.show(manager, "Datepickerdialog");
}
else {
com.hornet.dateconverter.DatePicker.DatePickerDialog dpd = com.hornet.dateconverter.DatePicker.DatePickerDialog.newInstance(
chooseSifarisAdapter.this,
now.get(Calendar.YEAR) + 57,
now.get(Calendar.MONTH) + 9,
now.get(Calendar.DAY_OF_MONTH)
);
dpd.show(manager, "Datepickerdialog");
}
holder.et.setText(nepaliDate);
});
break;
要使用com.hornet.dateconverter.DatePicker.DatePickerDialog,我必须实现一个包含重写方法的方法,如下所示:
@Override
public void onDateSet(com.hornet.dateconverter.DatePicker.DatePickerDialog datePickerDialog, int i, int i1, int i2) {
i1 = i1 + 1;
String startdate;
startdate = (i + "/" + i1 + "/" + i2);
DateConverter dc = new DateConverter();
Model outputOfConversion = dc.getEnglishDate(i, i1, i2);
int year = outputOfConversion.getYear();
int month = outputOfConversion.getMonth();
int day = outputOfConversion.getDay();
month = month + 1;
startDate = (year + "-" + month + "-" + day);
nepaliDate = i + "-" + i1 + "-" + i2;
使用上面的代码,仅在第二次单击时设置该值。假设我选择了一个日期,那么该日期将不会在确切时间在EditText上看到,而是在我单击EditText时第二次单击该日期。由于我使用过支架,因此应使用确切的EditText。请帮帮我吗?
答案 0 :(得分:0)
在此行holder.et = new EditText(context);
之后,您可以将 et 设置为无法聚焦。因为第一次单击可以将焦点转到您的EditText,所以避免了这种情况,因为它不可编辑,所以将它的focusable属性更改为false:holder.et.setFocusable(false)
。
编辑:
根据我对您的代码的了解:
第一次单击时,您的nepaliDate
为空,将文本设置为edittext时,将设置一个空字符串。
第一次单击后,当DatePicker弹出并选择日期时,nepaliDate
现在有了一个值,因为它是在onDateSet()
回调中分配的。
但是这次,您没有将nepaliDate
的值设置为holder.et
,
因此,我猜您第二次单击时,您的nepaliDate
仍然具有最后一个值。
我认为,最好在holder.et.setText(nepaliDate)
回调中调用onDateSet()
。您可以在点击时创建holder.et
的引用,该引用可在onDateSet()
内部访问。
这是我的观点