当前位置: 首页 > 知识库问答 >
问题:

在多个edittext视图上设置日期

支劲
2023-03-14

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

尽管我能够正确地呈现视图,但当我试图在一个edittext上设置日期时,该值总是在组中的最后一个edittext上设置。我不知道如何发送一个唯一的id来标识选定的edittext,以便正确设置日期。试着浏览网站上的多个帖子,但还不能让其中任何一个发挥作用。

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

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

结果

共有1个答案

苗盛
2023-03-14

我认为每次创建新的edittext时,您是否通过执行fromdatePickerDialog=new DatePickerDialog(这个,ne,..,唯一保存的是具有最后一个editext的对象)而用新实例夸大了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();
        }
    });

希望这能有所帮助,

 类似资料:
  • 我有一个EditText-Field,并为它设置了一个OnFocusChangeListener。当它失去焦点时,将调用一个方法,该方法用数据库中的EditText检查EditText的值。如果方法的return-value为true,则显示一个toast并且焦点应该再次回到EditText上。焦点应该总是回到EditText上,键盘应该显示,直到方法的return-value为false。 ed

  • 我试图显示不同的日期在不同的TextViews在一个片断中的答案后,MH在TimePicker onTimeSet上对这个问题的回答没有被调用,但我没有得到相同的结果为一个片断。 将使用此datepickerdialog的片段类药物具有以下代码: 我也尝试过为Time Picker对话框添加多个Picker的方法,但出现了相同的问题,即Pharming类中的onTimeSet方法没有像这里的OnD

  • 7.3.1 视图配置 可配置当前视图的名称,填写备注,及设定要排除的网址查询参数。 关于排除网址查询参数 对于每个视图,在受访页面中,系统将合并此处配置的排除网址查询参数,而不体现在受访页面的后缀参数中。 其中,系统默认排除的网址参数包括 秒针规范,谷歌规范,及系统默认的自定义广告参数规范。具体字段为: mz_ca,mz_sp,mz_sb,mz_kw, utm_content,utm_term,u

  • 我的应用程序设计使我对每个表单视图都有这样的布局:视图底部有一个浮动按钮。我使用来动态设置按钮的高度,无论屏幕宽度如何,总是相同的左/右边距,所以我最终有这样的布局: (1)底部按钮高度的清晰视图,以免隐藏按钮隐藏的滚动视图底部视图 基本上,这就是它看起来的样子: 现在我遇到的问题是当我点击底部的编辑文本时,例如,这里的第四个: 编辑文本会在键盘上向上移动,但不会在浮动按钮上移动,并且经常被它隐藏

  • 我的目标是找到一个Android库,它允许我基于数组在日历视图上标记各种日期。日期可能是连续的,也可能不是连续的。我的理想方案是更改每个日期的背景色。重要的复杂性是,我直到运行时才知道这个颜色,因为它来自服务器查询。 我一整天都在研究这个,我最大的希望似乎是(github)。然而,我发现他们的代码有些难以理解,这是我的责任,但我完全卡住了。 我在XML布局中添加了如下日历: 然后在我的活动中,我有

  • 我一直在使用在动态添加和删除视图到viewpager中显示的适配器,但并不是所有的都能正常工作。 我的ViewPager包含一些带有WebViews的自定义视图。我所做的是一个PagerAdapter的扩展类,它实现了与我第一篇文章的答案中所示的几乎相同的方法。 当我同时删除多个页面时,问题就来了。正如上面的答案中所解释的,对于删除页面,我们将适配器设置为空,然后再次设置。我使用的方法几乎与只使用