我正在使用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>
我该如何解决这个问题?
答案 0 :(得分:2)
更新:此问题我已filed bug report(Android&lt; = 2.3)。
所以我能够重现你拥有的案例。确实 IDEA 表示存在一些问题,应用程序正在崩溃。使用Eclipse将无法帮助(检查它) - 图形布局视图中也会发出无法创建DatePicker
对象的信号。
在您的情况下,问题是android:startYear
和android:endYear
不包括设备上的当前年份(范围2011-2011不包括2012年 - 当前年度)。
这可能是DatePicker
实施(API 11之前)tries to init the widget with current date {{}}}中的一个错误,无论android:startYear
和android:endYear
是否定义了当前年份的范围。
由于您使用的是API级别9,因此没有android:minDate
或android: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);
}
}
});
}
}