【问题标题】:Date highlight in DatePicker Java/Android StudioDatePicker Java/Android Studio 中的日期突出显示
【发布时间】:2017-03-06 10:46:21
【问题描述】:

我是 Java 和 Android Studio 的新手。我已经启动了具有日期功能的应用程序。我在应用程序菜单中创建了 3 个按钮。一种是按钮后退日期按钮前进

案例1.当您启动应用程序时,当前日期显示在日期按钮上,当您单击按钮后退或前进时,中间按钮上的日期会相应更改一天。

案例 2. 当您单击日期按钮本身(第一次)时,它会弹出日期选择器并突出显示按钮中的日期,您可以更改日期并更改日期按钮相应地从选择器中获取。

案例 3. 但是当我在选择器退出后(一次)使用前后按钮时,按钮上的日期仍然会发生变化,但它不会在选择器中突出显示。它只会在第一次正确突出显示,它也会在通过选择器更改日期时正确突出显示,但不能通过后退和前进按钮。

我做错了什么(除了使用不推荐使用的方法?;-))。任何意见将不胜感激。

//variables for date

int year_x,month_x,day_x;

DateFormat df = new SimpleDateFormat("dd-MM-yyyy");

MenuItem dynamicDate;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);


    dynamicDate = menu.findItem(R.id.action_date);
    Calendar cal = Calendar.getInstance();
    year_x = cal.get(Calendar.YEAR);
    month_x = cal.get(Calendar.MONTH) + 1;
    day_x = cal.get(Calendar.DAY_OF_MONTH);

    String currentDateString = (day_x<10?("0"+day_x):(day_x)) + "-" + (month_x<10?("0"+month_x):(month_x)) + "-" + year_x;
    Date currentDate = null;
    try {
        currentDate = df.parse(currentDateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    dynamicDate.setTitle(currentDateString);


    return true;
}

public DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker arg0, int year_xk, int month_xk, int day_xk) {


        Calendar cal = Calendar.getInstance();
        cal.set(year_xk, month_xk, day_xk);
        Date dateAfterChange = cal.getTime();
        String dateAfterChangeString = df.format(dateAfterChange);
        dynamicDate.setTitle(dateAfterChangeString);
        //Toast.makeText(MainActivity.this, "you clicked date", Toast.LENGTH_SHORT).show();
    }
};


@Override
public Dialog onCreateDialog(int id) {
    // TODO Auto-generated method stub
    if (id == 0473) {
        String currentDateString =  dynamicDate.getTitle().toString();
        //DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        Date currentDate = null;
        try {
            currentDate = df.parse(currentDateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(currentDate);



        return new DatePickerDialog(this, myDateListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
    }
    return null;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement


    if (id == R.id.action_back) {
        String currentDateString =  dynamicDate.getTitle().toString();
        //DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        Date currentDate = null;
        try {
            currentDate = df.parse(currentDateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(currentDate);
        cal.add(Calendar.DATE, -1);

        Date dateDayBefore = cal.getTime();
        String dateDayBeforeString = df.format(dateDayBefore);
        dynamicDate.setTitle(dateDayBeforeString);
        //return true;
    }



    if (id == R.id.action_date) {



        showDialog(0473);




    }

    if (id == R.id.action_forward) {
        String currentDateString =  dynamicDate.getTitle().toString();
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        Date currentDate = null;
        try {
            currentDate = df.parse(currentDateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(currentDate);
        cal.add(Calendar.DATE, +1);


        Date dateDayAfter = cal.getTime();
        String dateDayAfterString = df.format(dateDayAfter);
        dynamicDate.setTitle(dateDayAfterString);
        //return true;
    }



    return super.onOptionsItemSelected(item);
}

【问题讨论】:

  • 我认为您在按下后退或前进按钮时忘记更新日期选择器。看看这个question
  • @ZeusNet 但它第一次更新它。假设今天是第 6 天(带有日期的按钮将显示第 6 天),我通过按前进按钮 3 次将其更改为第 9 天,然后将选择器取出并突出显示第 9 天。我将取消,再次使用前进按钮将日期更改为 12 日,将选择器带出并突出显示 9 日。
  • 嗯,也许你应该调试你的 onCreateDialig 方法并检查解析了哪个日期。

标签: java android


【解决方案1】:

每次按下日期时,我都使用 removeDialog(按下后退和前进按钮时)让 onCreateDialog 工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多