缺少类datepicker

时间:2012-07-18 13:33:20

标签: java android datepicker

我正在使用IntelliJ IDEA 11.1.2开发一个Android应用程序,我需要在输入表单上使用datepicker。但是,当我插入它时,IDEA在预览窗口中显示“Missing class DatePicker”警告,并且我在手机上启动应用程序崩溃。如果我删除datepicker元素,应用程序可以正常工作。

我使用android 2.2作为目标平台,java 1.6作为java SDK。

这是我表单的源代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id = "@+id/l_main"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:text="Some text: "
    android:layout_width="fill_parent"
    android:textSize="@dimen/fnt_size"
    android:layout_height="wrap_content"
    />
<EditText
    android:id="@+id/source"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<TextView
    android:text="Some text: "
    android:layout_width="fill_parent"
    android:textSize="@dimen/fnt_size"
    android:layout_height="wrap_content"
    />
<EditText
    android:id="@+id/destination"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<TextView
    android:text="Some text: "
    android:layout_width="fill_parent"
    android:textSize="@dimen/fnt_size"
    android:layout_height="wrap_content"
    />
<DatePicker
    android:id="@+id/date"
    android:endYear="2011"
    android:startYear="2011"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/submitBtn"
    android:text="Search"
    android:layout_width="@dimen/btn_size"
    android:textSize="@dimen/fnt_size"
    android:layout_height="wrap_content" />
</LinearLayout>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

更新:此问题我已filed bug report(Android&lt; = 2.3)。

所以我能够重现你拥有的案例。确实 IDEA 表示存在一些问题,应用程序正在崩溃。使用Eclipse将无法帮助(检查它) - 图形布局视图中也会发出无法创建DatePicker对象的信号。

ROOT CAUSE

在您的情况下,问题是android:startYearandroid:endYear不包括设备上的当前年份(范围2011-2011不包括2012年 - 当前年度)。

这可能是DatePicker实施(API 11之前)tries to init the widget with current date {{}}}中的一个错误,无论android:startYearandroid:endYear是否定义了当前年份的范围。

由于您使用的是API级别9,因此没有android:minDateandroid:maxDate属性(在API 11中引入)。因此,要将日期选择限制在任何年份范围内(上述错误的解决方法),您可以实现自己的OnDateChangedListener

带注释的示例代码:

public class MyActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        DatePicker datePicker = (DatePicker) findViewById(R.id.date);

        final int MIN_YEAR = 2011;
        final int MAX_YEAR = 2011;

        datePicker.init(MIN_YEAR /* initial year */,
                        01 /* initial month of year */,
                        01 /* initial day of month */,
                new DatePicker.OnDateChangedListener() {
                    @Override
                    public void onDateChanged(DatePicker datePicker,
                                              int year,
                                              int monthOfYear,
                                              int dayOfMonth) {

                        // Override changing year to anything different from outside the range <MIN_YEAR, MAX_YEAR>
                        if (year < MIN_YEAR) {
                            datePicker.updateDate(MIN_YEAR, monthOfYear, dayOfMonth);
                        } else if (year > MAX_YEAR) {
                            datePicker.updateDate(MAX_YEAR, monthOfYear, dayOfMonth);
                        }
                    }

                });
    }
}