如何自定义DatePickerDialog以获取Tag?

时间:2014-11-18 06:04:45

标签: android datepickerdialog custom-datetimepicker

我有一个或多个具有相同名称的EditText,它是动态创建的。我根据从服务器获得的Requirement表的大小创建了这些EditText。现在,当我单击EditText时,我正在调用DatePickerDialog。所以我想要获取标签,并根据标签设置我想要的日期。

  

这里我不能使用setId。因为我已经用它了   复选框。

所以,如果我再做一次,那么我会发生冲突。所以我想和setTag一起去。将为每个EditText设置标记,当我单击EditText的onClick时,我需要获取标记。我还需要在onDateSet函数中获取标记。这样我就可以获得EditText的位置。谁能告诉我如何自定义DatePickerDialog?

for(int i =0;i<require.size();i++)
{
 requirement = require.get(i);
 date1 = new EditText(getActivity());
 date1.setLayoutParams(params1);
 date1.setWidth(1000);
 date1.setHint("Date");
 String datetag=new String();
        datetag="rid" +   requirement.r_id + "datetag";
        date1.setTag(datetag);
 date.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            DatePickerDialog dpd = new DatePickerDialog(context,
                    mDateSetListener, myear, mmonth, mday);
            dpd.show();
        }
    });
 }

private DatePickerDialog.OnDateSetListener mDateSetListener = new  DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    myear = year;
    mmonth = monthOfYear + 1;
    mday = dayOfMonth;
    if (mmonth < 10) {
        month = 0 + Integer.toString(mmonth);
    } else {
        month = Integer.toString(mmonth);
    }
    if (mday < 10) {
        day = 0 + Integer.toString(mday);
    } else {
        day = Integer.toString(mday);
    }
    nextdate = (new StringBuilder().append(myear).append("-")
            .append(month).append("-").append(day)).toString();
    date.setText(nextdate);           
    }
}
};

2 个答案:

答案 0 :(得分:1)

我认为您需要为数组中点击的位置创建一个编辑文本数组和一个变量计数器

int positionClicked;
EditText[] dateEditTextAray = new EditText[require.size()];
for(int i =0;i<require.size();i++)
{
final int j = i;
 requirement = require.get(i);
 dateEditTextAray[i] = new EditText(getActivity());
 dateEditTextAray[i].setLayoutParams(params1);
 dateEditTextAray[i].setWidth(1000);
  dateEditTextAray[i].setHint("Date");
 //String datetag=new String();
   //     datetag="rid" +   requirement.r_id + "datetag";
    //    date1.setTag(datetag);
  dateEditTextAray[i].setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
           positionClicked = j;
            DatePickerDialog dpd = new DatePickerDialog(context,
                    mDateSetListener, myear, mmonth, mday);
            dpd.show();
        }
    });
 }

private DatePickerDialog.OnDateSetListener mDateSetListener = new  DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    myear = year;
    mmonth = monthOfYear + 1;
    mday = dayOfMonth;
    if (mmonth < 10) {
        month = 0 + Integer.toString(mmonth);
    } else {
        month = Integer.toString(mmonth);
    }
    if (mday < 10) {
        day = 0 + Integer.toString(mday);
    } else {
        day = Integer.toString(mday);
    }
    nextdate = (new StringBuilder().append(myear).append("-")
            .append(month).append("-").append(day)).toString();
    dateEditTextAray[positionClicked].setText(nextdate);           
    }
}
};

答案 1 :(得分:1)

如果我弄错了,日期选择器没有设置相应EditText的日期。

如果这是问题,您必须进行以下更改。

dateEditTextAray[i].setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
       positionClicked = j;
        DatePickerDialog dpd = new DatePickerDialog(v.getContext(),
                mDateSetListener, myear, mmonth, mday);
        dpd.show();
    }
});

您必须传递v.getContext(),而不是传递上下文。 这将解决你的问题我猜。