Запустить таймер обратного отсчета, когда время выбрано из Time Picker в Android

Я хочу создать приложение, которое выбирает время из средства выбора времени, а затем время, которое находится в текстовом представлении, и таймер обратного отсчета запускается и имеет значение часов, минут и секунд... Код: -

      public class MainActivity extends Activity implements OnClickListener{
    /** Private members of the class */
    private TextView displayTime;
    private Button pickTime;
    private Button buttonStartTime, buttonStopTime;
    private TextView textViewShowTime; // will show the time
    private CountDownTimer countDownTimer; // built in android class
    private long totalTimeCountInMilliseconds; 
    private int pHour;
    private int pMinute;
    /** This integer will uniquely define the dialog to be used for displaying time picker.*/
    static final int TIME_DIALOG_ID = 0;

    /** 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) {
                pHour =pHour+ hourOfDay;
                pMinute = pMinute+minute;
                updateDisplay();
                displayToast();
            }
        };

    /** Updates the time in the TextView */
    private void updateDisplay() {
        displayTime.setText(
            new StringBuilder()
                    .append(pad(pHour)).append(":")
                    .append(pad(pMinute)));
 tv.setText(
                    new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mDay).append("-")
                    .append(mMonth + 1).append("-")

                    .append(mYear).append(" "));
    }

    /** Displays a notification when the time is updated */
    private void displayToast() {
        Toast.makeText(this, new StringBuilder().append("Time choosen is ").append(displayTime.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);
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /** Capture our View elements */
        displayTime = (TextView) findViewById(R.id.timeDisplay);
        pickTime = (Button) findViewById(R.id.pickTime);

        buttonStartTime = (Button) findViewById(R.id.btnStartTime);
        buttonStopTime = (Button) findViewById(R.id.btnStopTime);
        displayTime = (TextView) findViewById(R.id.timeDisplay);

        buttonStartTime.setOnClickListener(this);
        buttonStopTime.setOnClickListener(this);


        /** Listener for click event of the button */
        pickTime.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog(TIME_DIALOG_ID);
            }
        });

        /** Get the current time */
        final Calendar cal = Calendar.getInstance();
        mYear = cal.get(Calendar.YEAR);
        mMonth = cal.get(Calendar.MONTH);
        mDay = cal.get(Calendar.DAY_OF_MONTH);
        pHour = cal.get(Calendar.HOUR_OF_DAY);
        pMinute = cal.get(Calendar.MINUTE);

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

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btnStartTime) {
           // textViewShowTime.setTextAppearance(getApplicationContext(),
                 //   R.style.normalText);
            setTimer();
            buttonStopTime.setVisibility(View.VISIBLE);
            buttonStartTime.setVisibility(View.GONE);
           //edtTimerValue.setVisibility(View.GONE);
            //edtTimerValue.setText("");
            startTimer();

        } else if (v.getId() == R.id.btnStopTime) {
            countDownTimer.cancel();
            buttonStartTime.setVisibility(View.VISIBLE);
            buttonStopTime.setVisibility(View.GONE);

        }
    }

    private void setTimer() {
        int times = 0;
        if (!displayTime.getText().toString().equals("")) {
           times = Integer.parseInt(displayTime.getText().toString());
            //time=timer;
        } else
            Toast.makeText(MainActivity.this, "Please Enter Minutes...",
                    Toast.LENGTH_LONG).show();

        totalTimeCountInMilliseconds = 60 * times * 1000;

        //timeBlinkInMilliseconds = 30 * 1000;
    }


    private void startTimer() {
        countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) {
            // 500 means, onTick function will be called at every 500
            // milliseconds

            @Override
            public void onTick(long leftTimeInMilliseconds) {
                long seconds = leftTimeInMilliseconds / 1000;



                displayTime.setText(String.format("%02d:%02d:%02d", seconds / 3600,
                        (seconds % 3600) / 60, (seconds % 60)));
                // format the textview to show the easily readable format

            }

            @Override
            public void onFinish() {
                // this function will be called when the timecount is finished
                displayTime.setText("Time up!");
                displayTime.setVisibility(View.VISIBLE);
                buttonStartTime.setVisibility(View.VISIBLE);
                buttonStopTime.setVisibility(View.GONE);
                //edtTimerValue.setVisibility(View.VISIBLE);
            }

        }.start();

    }

    /** Create a new dialog for time picker */

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this,
                    mTimeSetListener, pHour, pMinute, false);
        }
        return null;
    }
}

Это дает недопустимую ошибку int: потому что значение в тексте равно «43:56», так как мне его решить


person user3278684    schedule 07.05.2014    source источник
comment
Это не сайт для поиска кода. Это ресурс о поиске решения проблем. В чем дело? Что вы пробовали?   -  person Alexander Mikhaylov    schedule 07.05.2014
comment
если я ввожу значение в тексте, например 234, мой код меняет 00:00:00, этот формат и обратный отсчет работают нормально ... но если я выбираю время из средства выбора времени, у меня есть значение, например 02:54, и я не знаю как преобразовать и запустить таймер обратного отсчета   -  person user3278684    schedule 07.05.2014
comment
Ваш вопрос: как преобразовать время в формате мм:сс в секунды? Если это так, прочитайте свой первоначальный вопрос и перепишите его. Добавьте свой код к вашему вопросу.   -  person Alexander Mikhaylov    schedule 07.05.2014
comment
я добавил свой код ..   -  person user3278684    schedule 07.05.2014


Ответы (1)


Вам не нужно получать время из вашего displayTime. Вам нужно получить время из полей pHour и pMinute. Измените это:

times = Integer.parseInt(displayTime.getText().toString());

к этому:

раз = рНчетыре*60 + пминуты;

person Alexander Mikhaylov    schedule 07.05.2014
comment
@user3278684 user3278684 Отметьте этот ответ как решение. Сообщите другому пользователю, что проблема решена. - person Alexander Mikhaylov; 07.05.2014
comment
Можете ли вы сказать мне, как мне удалить am/pm из диалога в этом коде и получить 24-часовой формат? - person user3278684; 07.05.2014
comment
Всегда читайте документацию, прежде чем спрашивать! developer.android.com/reference/android/ app/, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean) последний параметр в конструкторе - person Alexander Mikhaylov; 07.05.2014
comment
я хочу добавить soe время от средства выбора времени и автоматически изменить дату в соответствии со временем во время выполнения, когда я выбираю время, я получаю неправильное значение, и моя дата также не изменяется ... пожалуйста, помогите мне .. - person user3278684; 08.05.2014
comment
@Demand имеет ту же проблему > stackoverflow.com/questions/32585264/ - person Aditya; 15.09.2015