Android 在多个edittext视图上设置日期

Android 在多个edittext视图上设置日期,android,android-datepicker,Android,Android Datepicker,当我在每个edittext视图中单击时,需要用日期填充动态呈现的多个编辑文本(edittext视图以编程方式呈现)。我不知道需要多少编辑文本,因此无法在布局XML文件中硬编码它们 虽然我能够正确渲染视图,但当我尝试在一个edittext上设置日期时,该值总是在组中的最后一个edittext上设置。我不知道如何发送唯一的id来标识所选的编辑文本,以便正确设置日期。尝试浏览网站上的多个帖子,但都还没找到 如果需要,我可以粘贴整个代码 代码片段 private DatePick

当我在每个edittext视图中单击时,需要用日期填充动态呈现的多个编辑文本(edittext视图以编程方式呈现)。我不知道需要多少编辑文本,因此无法在布局XML文件中硬编码它们

虽然我能够正确渲染视图,但当我尝试在一个edittext上设置日期时,该值总是在组中的最后一个edittext上设置。我不知道如何发送唯一的id来标识所选的编辑文本,以便正确设置日期。尝试浏览网站上的多个帖子,但都还没找到

如果需要,我可以粘贴整个代码

代码片段

            private DatePickerDialog fromDatePickerDialog;
            TableLayout table = new TableLayout(this);
            TextView textViewColumn = new TextView(this);
            textViewColumn.setGravity(Gravity.RIGHT);
            textViewColumn.setTextColor(Color.BLACK);
            textViewColumn.setPadding(0, 0, 5, 0);
            textViewColumn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
            textViewColumn.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
            row.addView(textViewColumn);

            if(childObj.getType().equals("Date")){
                final EditText rowEditText = new EditText(this);
                setDateTimeField(rowEditText); //setting the date
                rowEditText.setMaxWidth(50);
                rowEditText.setMaxHeight(40);
                rowEditText.setTag(childObj.getName());
                row.addView(rowEditText);
            }

            table.addView(row);
private void setDateTimeField(final EditText dateEditText) {
    dateEditText.setOnClickListener(this);
    dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);

    dateEditText.setGravity(Gravity.LEFT);

    Calendar newCalendar = Calendar.getInstance();
    fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);
            dateEditText.setText(dateFormatter.format(newDate.getTime()));
        }

    },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

    fromDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            if (which == DialogInterface.BUTTON_NEGATIVE) {
                dialog.cancel();
                dateEditText.setText("");
            }
        }
    });
}
在编辑文本-代码片段中设置日期

            private DatePickerDialog fromDatePickerDialog;
            TableLayout table = new TableLayout(this);
            TextView textViewColumn = new TextView(this);
            textViewColumn.setGravity(Gravity.RIGHT);
            textViewColumn.setTextColor(Color.BLACK);
            textViewColumn.setPadding(0, 0, 5, 0);
            textViewColumn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
            textViewColumn.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
            row.addView(textViewColumn);

            if(childObj.getType().equals("Date")){
                final EditText rowEditText = new EditText(this);
                setDateTimeField(rowEditText); //setting the date
                rowEditText.setMaxWidth(50);
                rowEditText.setMaxHeight(40);
                rowEditText.setTag(childObj.getName());
                row.addView(rowEditText);
            }

            table.addView(row);
private void setDateTimeField(final EditText dateEditText) {
    dateEditText.setOnClickListener(this);
    dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);

    dateEditText.setGravity(Gravity.LEFT);

    Calendar newCalendar = Calendar.getInstance();
    fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);
            dateEditText.setText(dateFormatter.format(newDate.getTime()));
        }

    },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

    fromDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            if (which == DialogInterface.BUTTON_NEGATIVE) {
                dialog.cancel();
                dateEditText.setText("");
            }
        }
    });
}
onClick

@Override
public void onClick(View view) {
    fromDatePickerDialog.show();
}
结果

            private DatePickerDialog fromDatePickerDialog;
            TableLayout table = new TableLayout(this);
            TextView textViewColumn = new TextView(this);
            textViewColumn.setGravity(Gravity.RIGHT);
            textViewColumn.setTextColor(Color.BLACK);
            textViewColumn.setPadding(0, 0, 5, 0);
            textViewColumn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
            textViewColumn.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
            row.addView(textViewColumn);

            if(childObj.getType().equals("Date")){
                final EditText rowEditText = new EditText(this);
                setDateTimeField(rowEditText); //setting the date
                rowEditText.setMaxWidth(50);
                rowEditText.setMaxHeight(40);
                rowEditText.setTag(childObj.getName());
                row.addView(rowEditText);
            }

            table.addView(row);
private void setDateTimeField(final EditText dateEditText) {
    dateEditText.setOnClickListener(this);
    dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);

    dateEditText.setGravity(Gravity.LEFT);

    Calendar newCalendar = Calendar.getInstance();
    fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);
            dateEditText.setText(dateFormatter.format(newDate.getTime()));
        }

    },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

    fromDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            if (which == DialogInterface.BUTTON_NEGATIVE) {
                dialog.cancel();
                dateEditText.setText("");
            }
        }
    });
}

我认为每次你创建一个新的
EditText
,你都是在通过执行
fromDatePickerDialog=new DatePickerDialog(
ne,…
)来用一个新的实例对
fromDatePickerDialog
进行了越权操作。 您的解决方案可能是为每个
editText
创建一个新对象
DatePickerDialog
,例如:

private void setDateTimeField(final EditText dateEditText) {
        dateEditText.setOnClickListener(this);
        dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
        dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);

        dateEditText.setGravity(Gravity.LEFT);

        Calendar newCalendar = Calendar.getInstance();
        DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                dateEditText.setText(dateFormatter.format(newDate.getTime()));
            }

        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

        datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                if (which == DialogInterface.BUTTON_NEGATIVE) {
                    dialog.cancel();
                    dateEditText.setText("");
                }
            }
        });
    }
您还可以在上述函数中设置setOnClickListner,如下所示:

dateEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            datePickerDialog.show();
        }
    });

希望这有帮助,

试试这个很棒的方法。很好的发现。我没有完全意识到我在该方法中用一个新值覆盖了同一个实例。很高兴这是一个小小的调整,而且很有帮助。