繁体   English   中英

如何在AlertDialog中获取值TimePicker?

[英]How to get value TimePicker inside AlertDialog?

我有一个AlertDialog内生成的TimePicker,所以不知道您的ID是什么。 如何获得用户设定的值? 我想每天在这个时候向您发送通知(我已经有一个及时通知)。 然后:他们的建议是什么?

/** Private members of the class */
private TextView MostraTime;
private Button Time;

private int DayHour;
private int DayMinute;

Intent VoltaMenu;

/**
 * This integer will uniquely define the dialog to be used for displaying
 * time picker.
 */
static final int TIME_DIALOG_ID = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notify);

    /** Capture our View elements */

    MostraTime = (TextView) findViewById(R.id.MostraTempo);
    Time = (Button) findViewById(R.id.TempoAlerta);

    /** Listener for click event of the button */
    Time.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            showDialog(TIME_DIALOG_ID);
        }
    });

    /** Get the current time */
    final Calendar cal = Calendar.getInstance();
    DayHour = cal.get(Calendar.HOUR_OF_DAY);
    DayMinute = cal.get(Calendar.MINUTE);

    /** Display the current time in the TextView */
    updateDisplay();

}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this, mTimeSetListener, DayHour,
                DayMinute, false);

    }
    return null;
}

/** Callback received when the user "picks" a time in the dialog */
private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        DayHour = hourOfDay;
        DayMinute = minute;
        updateDisplay();
        displayToast();
    }
};

/** Updates the time in the TextView */
private void updateDisplay() {
    MostraTime.setText(new StringBuilder().append(pad(DayHour)).append(":")
            .append(pad(DayMinute)));
}

/** Displays a notification when the time is updated */
private void displayToast() {

    VoltaMenu = new Intent(MenuNotificacao.this, Prefs.class);
    startActivity(VoltaMenu);

    Toast.makeText(
            this,
            new StringBuilder().append(
                    getResources().getString(R.string.horario) + " ")
                    .append(MostraTime.getText()), Toast.LENGTH_SHORT)
            .show();

}

/** Add padding to numbers less than ten */
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}

}

`

尝试通过此链接从timepicker获取值。.link是http://androidexample.com/Time_Picker_With_AM_PM_Values_-__Android_Example/index.php?view=article_discription&aid=86&aaid=109

     /********* display current time on screen Start ********/
       final Calendar c = Calendar.getInstance();
            // Current Hour
            hour = c.get(Calendar.HOUR_OF_DAY);
            // Current Minute
            minute = c.get(Calendar.MINUTE);

            // set current time into output textview
            updateTime(hour, minute);

         /********* display current time on screen End ********/

            // Add Button Click Listener
            addButtonClickListener();

        }

        public void addButtonClickListener() {

            btnClick = (Button) findViewById(R.id.btnClick);

            btnClick.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    showDialog(TIME_DIALOG_ID);

                }

            });

        }

        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case TIME_DIALOG_ID:

                // set time picker as current time
                return new TimePickerDialog(this, timePickerListener, hour, minute,
                        false);

            }
            return null;
        }

        private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {


            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
                // TODO Auto-generated method stub
                hour   = hourOfDay;
                minute = minutes;

                updateTime(hour,minute);

             }

        };

        private static String utilTime(int value) {

            if (value < 10)
                return "0" + String.valueOf(value);
            else
                return String.valueOf(value);
        }

        // Used to convert 24hr format to 12hr format with AM/PM values
        private void updateTime(int hours, int mins) {

            String timeSet = "";
            if (hours > 12) {
                hours -= 12;
                timeSet = "PM";
            } else if (hours == 0) {
                hours += 12;
                timeSet = "AM";
            } else if (hours == 12)
                timeSet = "PM";
            else
                timeSet = "AM";


            String minutes = "";
            if (mins < 10)
                minutes = "0" + mins;
            else
                minutes = String.valueOf(mins);

            // Append in a StringBuilder
             String aTime = new StringBuilder().append(hours).append(':')
                    .append(minutes).append(" ").append(timeSet).toString();

              output.setText(aTime);
        }

我像这样

 public void alertDialog(View view) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = LayoutInflater.from(this);
    View alerdialogV = inflater.inflate(R.layout.alert_layout, null);
    builder.setView(alerdialogV);
    builder.setTitle("1st aletdialog");
    final TextView timeset = (TextView) alerdialogV.findViewById(R.id.timepicker);
    final TextView timeset1 = (TextView) alerdialogV.findViewById(R.id.timepicker2);

    timeset.setOnClickListener(getL(timeset));
    timeset1.setOnClickListener(getL(timeset1));
    builder.show();

这是方法

 @NonNull
private View.OnClickListener getL(final TextView t) {
    return new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Calendar c = Calendar.getInstance();

            int hour = c.getTime().getHours();
            int minut = c.getTime().getMinutes();
            MyTimePicker tpd = new MyTimePicker(ctx, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    t.setText(hourOfDay + ":" + minute);
                }
            }, hour,minut, is24HrView);
            tpd.show();

        }
    };
}

这是我自定义的Timepicker

public class MyTimePicker extends TimePickerDialog {


private final static int TIME_PICKER_INTERVAL = 5;
private TimePicker timePicker;
private final OnTimeSetListener callback;

public MyTimePicker(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
    super(context, TimePickerDialog.THEME_HOLO_DARK, callBack, hourOfDay, minute / TIME_PICKER_INTERVAL, is24HourView);
    this.callback = callBack;
}

@Override
public void onClick(DialogInterface dialog, int which) {
    if (callback != null && timePicker != null) {
        timePicker.clearFocus();
        callback.onTimeSet(timePicker, timePicker.getCurrentHour(),
                timePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
    }
}

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    try {
        Class<?> classForid = Class.forName("com.android.internal.R$id");
        Field timePickerField = classForid.getField("timePicker");
        this.timePicker = (TimePicker) findViewById(timePickerField
                .getInt(null));
        Field field = classForid.getField("minute");
        NumberPicker mMinuteSpinner = (NumberPicker) timePicker
                .findViewById(field.getInt(null));
        mMinuteSpinner.setMinValue(0);
        mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
        List<String> displayedValues = new ArrayList<String>();
        for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
            displayedValues.add(String.format("%02d", i));
        }
        mMinuteSpinner.setDisplayedValues(displayedValues
                .toArray(new String[0]));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM