java - TimePicker显示不同时间

标签 java android timepicker android-timepicker

我制作了一个editText,用于显示TimePicker

static Calendar c = null;
static int hour;
static int min;
static int hour1, min1;

 time = (EditText) promptView.findViewById(R.id.time);

  time.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Fragment fragDialog = getActivity().getSupportFragmentManager().findFragmentByTag("TimePicker");
                        if (fragDialog == null) { // Fragment not added
                            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
                            tp.show(ft, "TimePicker");
                        } else {
                            // already active
                        }
                    }
                });

  public static class TimePick extends android.support.v4.app.DialogFragment implements TimePickerDialog.OnTimeSetListener {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

            c = Calendar.getInstance();
            hour = c.get(Calendar.HOUR_OF_DAY);
            min = c.get(Calendar.MINUTE);
            return new TimePickerDialog(getActivity(), this, hour, min, DateFormat.is24HourFormat(getActivity()));
        }


        @Override
        public void onTimeSet(TimePicker view, int hourofDay, int minute) {
            time.setText(Integer.toString(hourofDay) + ":" + Integer.toString(minute));
            hour1 = hourofDay;
            min1 = minute;
        }
    }

当点击保存按钮时,会将选择的时间传递给AlarmManager,并显示分钟和小时。

 save.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Calendar alarm = Calendar.getInstance();
                        alarm.set(Calendar.HOUR_OF_DAY, hour1);
                        alarm.set(Calendar.MINUTE, min1);
                        alarm.set(Calendar.SECOND, 0);
                        Toast.makeText(getActivity(), hour1 + "" + min1, Toast.LENGTH_SHORT).show();
                        Intent myIntent = new Intent(getActivity(), MyReceiver.class);
                        pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
                        AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
                        alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent);
                    }
                });

                alert.setView(promptView);
                alert.show();
             }

假设我选择时间为 11 小时,分钟为 20,然后单击“保存”,Toast 会正确显示 1120。但第二次,我点击保存而不点击时间editTextToast应该显示00,但它显示了之前的结果1120 相反。

最佳答案

我不能确定,因为一方面,我没有完整的代码,另一方面,我不知道你所说的“第二次”是什么意思。

但是你的变量被声明为静态,这意味着即使你销毁了该对象,下次实例化一个新对象时,这些变量将具有它们在前一个对象上的值实例。这是因为,静态变量在同一类的所有实例之间共享和保留。

public class Foo {
    static int bar;
}

Foo a = new Foo();
a.bar = 3;

Foo b = new Foo();
Log.d("tag", "value = " + b.bar); // this will print 3

编辑:

如果您仍然想以这种方式使用这些变量,则需要先在某个地方清理它们,但最好的位置由您决定。

hour1 = 0;
min1 = 0;

关于java - TimePicker显示不同时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40181015/

相关文章:

java - 关于 PrimeFaces 部分过程的问题

android - 如何决定用作 android 的 VectorDrawable 的 svg 文件的大小?

android - 从 Dialogfragment 中的 Timepicker 返回值到调用 fragment

javascript - 响应式 Bootstrap 3 时间选择器?

java - Hector 和 Cassandra 问题 NoSuchFieldError : DEFAULT_MEMTABLE_THROUGHPUT_IN_MB

java - Android小部件未多次更新

java - 如何将相同的方法添加到多个类( Activity )

java - 与 DriverManager 中的 GetConnection() 方法和 Scanner、System.in 中的 next() 方法相关的线程死锁

java - 将 MySQL 转储文件导入到 SQLite