2

我正在使用 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>

我怎么解决这个问题?

4

1 回答 1

2

更新:我已经为此问题提交了错误报告(Android <= 2.3)。

因此,我能够重现您拥有的案例。事实上, IDEA表明存在一些问题并且应用程序正在崩溃。使用 Eclipse 将无济于事(选中它) -那里的图形布局视图也会发出信号,表明它无法创建DatePicker对象。

根本原因

您的问题出现在设备上android:startYear并且android:endYear不包括当前年份(2011-2011 年不包括 2012 年-当前年份)。

这可能是DatePicker实现中的一个错误(在 API 11 之前),它尝试使用当前日期初始化小部件,android:startYear无论是否android: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);
                        }
                    }

                });
    }
}
于 2012-07-18T14:46:32.620 回答