0

Я пытаюсь создать выбор даты, динамически (где я не знаю точное число).Как обрабатывать динамически создаваемые датпикеры?

Я имел в виду этот учебник http://javapapers.com/android/android-datepicker/.

В моем коде я создаю дату сборщиков следующим образом: -

TableRow row = new TableRow(this); 
    row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

    edit = new EditText(this); 
    edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
    edit.setHint("Tap to select "+input_desc[index]); 
    edit.setFocusable(false); 
    edit.setClickable(true); 


    edit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
      DialogFragment newFragment = new SelectDateFragment(); 
      newFragment.show(getSupportFragmentManager(), "DatePicker"); 
     } 
    }); 
    allElement_date.add(edit); 

    row.addView(edit); 
    table.addView(row); 

Приведенный выше код вызывается неизвестное количество раз. Тогда у меня есть follwing код: -

@SuppressLint("ValidFragment") 
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
    } 

    public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
     populateSetDate(yy, mm+1, dd); 
    } 
} 

Однако, как вы можете видеть, что нет никакого способа отличить между различными кликами на EditText, чтобы установить их по-разному.

public void populateSetDate(int year, int month, int day) 
{ 
} 

Может кто-нибудь, пожалуйста, помогите мне, как определить, какой отредактированный текст был нажат, и установить их самостоятельно.

Заранее спасибо.

+0

Ребята, вам нужна ваша помощь здесь. – Newbie

+1

Вы можете передать ссылку на ваш EditText в конструкторе SelectDateFragment, а также передать это в методе populateSetDate: 'DialogFragment newFragment = новый SelectDateFragment (редактировать),' Или просто сохранить ссылку на индекс строки и принести EditText из таблицы при необходимости. Поскольку я не уверен, что это то, что вы собираетесь делать, я оставил его как комментарий вместо ответа. Пожалуйста, не стесняйтесь спрашивать более подробную информацию, если это подход, который вы ищете. – Zerga

+0

@Zerga Да, я искал что-то вроде этого. Пожалуйста, предложите, какой из лучших вариантов вы бы упомянули. И не могли бы вы рассказать немного больше об этом. – Newbie

ответ

0

Расширьте SelectDateFragment класс со следующим конструктором, сохраняя ссылку на EditText поле:

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    private EditText edit 

    public SelectDateFragment(EditText edit) { 
     this.edit = edit; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
    } 

    public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
     populateSetDate(edit, yy, mm+1, dd); 
    } 
} 

И в populateSetDate метода:

public void populateSetDate(EditText edit, int year, int month, int day) 
{ 
    edit.setText(day + "." + month + "." + year); 
} 

Так что при создании EditText поля и его onClick события, вы можете пройти поле:

TableRow row = new TableRow(this); 
row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

edit = new EditText(this); 
edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
edit.setHint("Tap to select "+input_desc[index]); 
edit.setFocusable(false); 
edit.setClickable(true); 


edit.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View view) { 
     DialogFragment newFragment = new SelectDateFragment(edit); 
     newFragment.show(getSupportFragmentManager(), "DatePicker"); 
    } 
}); 
allElement_date.add(edit); 

row.addView(edit); 
table.addView(row); 

Конечно, вы можете использовать более сложную форму форматирования даты при вызове setText() вместо того, чтобы просто строить ее вместе с конкатенацией строк «+». И, возможно, вы не хотите передавать значения за год, месяц и дату отдельно, но это просто косметика, которая не является частью вашей первоначальной проблемы.

0

Во-первых, init TableLayout и в этом макете добавьте tableRow, TableRow не добавлен directlly.

+0

Конечно, я сначала инициализировал таблицу. Это не полный код. – Newbie

Смежные вопросы