Android - 必须单击两次调用相同DatePicker的按钮才能工作

时间:2012-11-16 16:25:38

标签: android android-button android-datepicker

我有一个带有两个按钮的活动,它们调用相同的DatePicker。 我的活动必须处理一个日期间隔。一个按钮用于设置“从”日期,另一个按钮用于设置“到”日期。

在活动的onCreate之后,如果我单击我想要的任何按钮它运行良好:它正确调用DatePicker并且它顺利进行。如果我单击肯定按钮它会按预期完成所有工作,但是如果我想再次调用datePicker,我必须单击两次,因为我第一次点击一个按钮它什么都不做。

所以,总结一下:

  • 点击一个按钮;它运作良好
  • 点击否定按钮;这一切都按预期工作
  • 再次点击;再次,它工作正常
  • 点击正面按钮;它的工作原理
  • 点击一个按钮(两个中的任何一个);除了将按钮显示在按下状态一段时间外,没有任何操作
  • 再次点击;它按预期工作

这是我的代码:

公共类MyActivity扩展了ListActivity {

private int mYear;
private int mMonth;
private int mDay;

private Date fromDate, toDate;

private Button fromBtn, toBtn;
Calendar cal;

DatePickerDialog datePicker;

static final int DATE_DIALOG_ID = 0;

private int pressedBtn=-1; // 0=from & 1=to

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    cal = Calendar.getInstance();
    mYear = cal.get(Calendar.YEAR);
    mMonth = cal.get(Calendar.MONTH);
    mDay = cal.get(Calendar.DAY_OF_MONTH);
    cal.add(Calendar.MONTH, +1);
    this.toDate = cal.getTime();
    cal.add(Calendar.MONTH, -2);
    this.fromDate = cal.getTime();

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    fromBtn = (Button) findViewById(R.id.frombtn);
    fromBtn.setText(dateFormat.format(fromDate));
    toBtn = (Button) findViewById(R.id.tobtn);
    toBtn.setText(dateFormat.format(toDate));

    datePicker = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
    updateDisplay();
}


public void setData(View target) {

    switch(target.getId()) {
    case R.id.frombtn:
        pressedBtn = 0;
        cal.setTime(fromDate);
        break;
    case R.id.tobtn:
        pressedBtn = 1;
        cal.setTime(toDate);
        break;
    }

    mYear = cal.get(Calendar.YEAR);
    mMonth = cal.get(Calendar.MONTH);
    mDay = cal.get(Calendar.DAY_OF_MONTH);

    datePicker.updateDate(mYear, mMonth, mDay);

    showDialog(DATE_DIALOG_ID);
}


@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return datePicker;
    }
    return null;
}


private DatePickerDialog.OnDateSetListener mDateSetListener =
    new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        updateDisplay();
    }
};


private void updateDisplay() {

    Date date = new Date(mYear-1900, mMonth, mDay);
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

    if(this.pressedBtn==0) {
        this.fromDate = data;
        daBtn.setText(dateFormat.format(fromDate));
    }
    else if(this.pressedBtn==1){
        this.toDate = data;
        aBtn.setText(dateFormat.format(toDate));
    }
    toDate.setHours(23);
    toDate.setMinutes(59);
    toDate.setSeconds(59);
    fromDate.setHours(0);
    fromDate.setMinutes(0);
    fromDate.setSeconds(0);

    //riparte storico
    progDialog = ProgressDialog.show(MyActivity.this, "", "Doing stuff with dates...", true, true);
    Thread thrd = new Thread()
    {
        public void run() {

            ...

        }
    };
    thrd.start();
}

}

这是布局:

<Button
   android:id="@+id/frombtn"
   android:layout_width="100dp"
   android:layout_height="wrap_content"
   android:background="@drawable/textedit_state"
   android:onClick="setData" />

<Button
   android:id="@+id/tobtn"
   android:layout_width="100dp"
   android:layout_height="wrap_content"
   android:background="@drawable/textedit_state"
   android:onClick="setData" />

我认为这与焦点相矛盾,但我使用了

android:focusable =“false”

android:focusableInTouchMode =“false”

两个按钮都是

。我在视图中没有任何其他可点击的项目......

我甚至尝试为按钮设置两种不同的方法,两种不同的选择器和两种不同的onDateSetListener;一切都没有改变!

对不起,如果我不是很清楚,但我是意大利人......

所以,提前感谢您的帮助!

0 个答案:

没有答案