我正在尝试创建一个应用程序,其中用户从DatePicker中选择一个日期,然后使用一些值更新列表。
我的GUI如下所示:
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
</LinearLayout>
而我的DatePicker初始化和处理如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datePicker = (DatePicker) findViewById(R.id.datePicker);
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, month, day, dateSetListener);
}
private DatePicker.OnDateChangedListener dateSetListener = new DatePicker.OnDateChangedListener() {
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar c = Calendar.getInstance();
c.set(year, monthOfYear, dayOfMonth);
System.out.println ("TEST");
}
};
在CatLog中,我看到“TEST”字符串输出了两次,每次都是在我使用小工具上的+/-按钮时输出的。可能是什么问题?
注意:我故意“禁用”了列表更新代码,以确保问题与ListView无关,如here中那样
8条答案
按热度按时间rwqw0loc1#
当我测试我的应用程序时,方法onDateSet在接受日期选择后调用了两次,在我取消选择时调用了一次。
我使用参数视图在方法onDateSet中添加了验证,如下所示
g0czyy6m2#
我仍然没有找到一个很好的解决方法。我找到了一个变通方法,这样事件就不会触发两次。变通方法如下:
nbewdwxp3#
我重写了DatePickerDialog对话框的onClick方法,只处理BUTTON_POSITIVE单击,而不是onDateSet回调。
代码保持清晰,但仍然不清楚为什么onDateSet被调用两次。
pieyvz9o4#
x6h2sr285#
也许可以通过添加示例变量来修改侦听器,这样就可以检查它们是否与上次调用方法时不同:
j2datikz6#
ymdaylpp7#
无需在Jelly bean下添加此代码
q9rjltbz8#
我创建了一个SupportDatePickerDialog.kt类
用法: