仅在第二次单击时设置EditText中的值

时间:2018-11-26 09:25:38

标签: android datepicker dynamic-forms

我有一个适配器,其中使用开关盒生成动态形式。在所有情况下都可以使用,但在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。请帮帮我吗?

1 个答案:

答案 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()内部访问。

这是我的观点