0

I am trying to create date pickers dynamically (where I do not know the exact number).

I was referring to this tutorial http://javapapers.com/android/android-datepicker/.

In my code I create date pickers in the following way :-

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);

The above code gets called unknown number of times. Then I have the follwing code:-

@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);
    }
}

However as you can see there is no way to distinguish between the different clicks on the editText to set them differently.

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

Could someone please help me how to figure out which edit text has been clicked and set them independently.

Thanks in advance.

Newbie
  • 129
  • 1
  • 3
  • 11
  • Guys, need your help here. – Newbie Jul 04 '13 at 09:53
  • 1
    You could pass the reference to your EditText in the constructor of SelectDateFragment and also pass this in the method populateSetDate: `DialogFragment newFragment = new SelectDateFragment(edit);` Or just keep a reference to the row index and fetch the EditText from the table when needed. Since I am not sure if this is what you are going for, i left it as a comment instead of an answer. Please feel free to ask for more details if this is the approach you are looking for. – Zerga Jul 04 '13 at 11:00
  • @Zerga Yes I was looking for something like this. Please suggest which would be the best way from the alternatives that you mentioned. And could you please elaborate a bit more on it. – Newbie Jul 04 '13 at 13:49

2 Answers2

0

Firstly init TableLayout and in this layout add tableRow ,TableRow not added directlly .

nilesh patel
  • 834
  • 1
  • 5
  • 10
0

Extend your SelectDateFragment class with the following constructor, keeping a reference to the EditText field:

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);
    }
}

And in the populateSetDate method:

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

So that when you create the EditText field and its onClick event, you can pass the field:

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);

Of course you could use some more elaborate form of date formatting when calling setText() instead of just building it together with "+" string concatenation. And maybe you don't want to pass values for year, month and date separately, but that's just cosmetics that are not part of your initial problem.

Zerga
  • 305
  • 1
  • 8