Значение в EditText устанавливается только при втором нажатии - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть адаптер, в котором динамическая форма генерируется с использованием регистра переключателя.все дела работают, но в случае 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.Так как я использовал держатель, следует использовать точный текст редактирования.пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 26 ноября 2018

После этой строки holder.et = new EditText(context); вы можете установить et , чтобы не фокусироваться.Поскольку первым щелчком может быть переключение фокуса на ваш EditText, чтобы избежать этого, поскольку он не будет редактируемым, измените его свойство focusable на false следующим образом: holder.et.setFocusable(false).

РЕДАКТИРОВАТЬ: В соответствии с тем, что я вижу с вашим кодом: При первом щелчке ваш nepaliDate пуст, а когда вы устанавливаете текст в свой текст редактирования, вы устанавливаете пустую строку.

После первого щелчка, когда всплывающее окно DatePicker и вы выбираете дату, ваш nepaliDate теперь имеет значение, потому что оно присваивается в обратном вызове onDateSet().

Но на этот раз вы не устанавливаете значение nepaliDate на holder.et,

Так что, когда вы нажимаете второй раз, я думаю, ваш nepaliDate все еще имеетпоследнее значение

Думаю, лучше позвонить holder.et.setText(nepaliDate) внутри onDateSet() обратного вызова.Вы можете создать ссылку holder.et по клику, которая будет доступна внутри onDateSet().

Это моя точка зрения

...