2

我有一个带有两个按钮的活动,它们调用相同的 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" />

我认为这与焦点冲突,但我使用了

机器人:可聚焦=“假”

安卓:focusableInTouchMode = “假”

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

我什至尝试为按钮制作两种不同的方法,两个不同的选择器和两个不同的 onDateSetListener;什么也没有变!

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

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

4

0 回答 0