1

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

在这里我不能使用setId。因为我已经将它用于 CheckBox。

所以如果我再做一次,我就会发生冲突。所以我想和 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);           
    }
}
};
4

2 回答 2

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);           
    }
}
};
于 2014-11-18T07:09:35.857 回答
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()。我猜这将解决你的问题。

于 2014-11-18T07:14:04.220 回答