从3个Textviews获取价值并转换为倒计时器的int

时间:2014-07-27 18:08:41

标签: java android timer textview countdowntimer

目前我有三个文本视图,我用于我的Android应用程序中的倒数计时器HH:MM:SS。 (小时,分钟和秒)。我允许用户将textviews设置为当时的特定数字。然后我尝试通过转换为int从文本视图中获取值,然后使用整数值作为倒数计时器的秒数。但问题是int没有值,因此计时器无法启动。

enter image description here

当用户拖动擦洗器时,他可以将textview值更改为小时,分钟或秒:

以下是我的onCreate方法中的代码:

  @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                                      boolean fromUser) {

                            int progress_count = 0;

                            for (int i=0;i<24;i=i+1)
                            {

                                if (progress ==120) {
                                    mSeekArcProgress.setText("24");

                                }
                                else if (progress == progress_count)
                                {
                                    mSeekArcProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 5;



                            }
                        }
                    });
                } else if (v.getId() == R.id.minutetext) {
                    //corresponding button logic should below here

                    mSeekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {


                        @Override
                        public void onStopTrackingTouch(SeekArc seekArc) {
                        }
                        @Override
                        public void onStartTrackingTouch(SeekArc seekArc) {
                        }


                        //This sets the actual string for the minutes
                        @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                                      boolean fromUser) {
                            int progress_count = 0;

                            for (int i=0;i<120;i++)
                            {

                                 if (progress ==120) {
                                     mSeekArcMinuteProgress.setText("00");

                                 }
                                else if (progress == progress_count)
                                {
                                    mSeekArcMinuteProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 2;


                            }

                        }
                    });
                } else if (v.getId() == R.id.secondtext) {
                    //corresponding button logic should below here
                    mSeekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {

                        @Override
                        public void onStopTrackingTouch(SeekArc seekArc) {
                        }
                        @Override
                        public void onStartTrackingTouch(SeekArc seekArc) {
                        }


                        //This sets the actual string for the seconds
                        @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                      boolean fromUser) {



                            // so ur setting it to HALF of what "progress" is = to

                            int progress_count = 0;

                            for (int i=0;i<60;i++)
                            {


                                if (progress ==120) {
                                    mSeekArcSecondProgress.setText("00");

                                }
                                else if (progress == progress_count)
                                {
                                    mSeekArcSecondProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 2;


                            }

                        }
                    });
                }

以下代码中引用了TextView ID,该代码位于倒数计时器的setActionListener方法中:

  private void setActionListeners() {

        // IT IS RIGHT BELOW CHECK IT OUT.



        number_text = (TextView) findViewById(R.id.hour_progress_number);
        minute_text = (TextView) findViewById(R.id.minute_progress_number);
        second_text = (TextView) findViewById(R.id.second_progress_number);

         hourint = Integer.valueOf(number_text.getText().toString());

         minuteint = Integer.valueOf(minute_text.getText().toString());

         secondint = Integer.valueOf(second_text.getText().toString());




        totalTimeCountInMilliseconds = ((hourint*60*60) +(minuteint*60) + (secondint)) * 1000;      // time count for 3 minutes = 180 seconds
        timeBlinkInMilliseconds = totalTimeCountInMilliseconds/1000;



        start_timer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

               // textViewShowTime.setTextAppearance(getApplicationContext(), R.style.normalText);

                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;
                        mSeekArc.setVisibility(View.INVISIBLE);





                        if ( leftTimeInMilliseconds < timeBlinkInMilliseconds ) {
                           // textViewShowTime.setTextAppearance(getApplicationContext(), R.style.blinkText);
                            // change the style of the textview .. giving a red alert style

                            if ( blink ) {
                                number_text.setVisibility(View.VISIBLE);
                                minute_text.setVisibility(View.VISIBLE);
                                second_text.setVisibility(View.VISIBLE);


                                // if blink is true, textview will be visible
                            } else {
                                number_text.setVisibility(View.INVISIBLE);
                                minute_text.setVisibility(View.INVISIBLE);
                                second_text.setVisibility(View.INVISIBLE);


                            }

                            blink = !blink;         // toggle the value of blink
                        }



                        second_text.setText(String.format("%02d", seconds % 60));
                        minute_text.setText(String.format("%02d", seconds / 60));
                        number_text.setText(String.format("%02d", seconds / 3600));                     // format the textview to show the easily readable format
                    }




                    @Override
                    public void onFinish() {
                        // this function will be called when the timecount is finished
                        //textViewShowTime.setText("Time up!");
                        number_text.setVisibility(View.VISIBLE);
                        minute_text.setVisibility(View.VISIBLE);
                        second_text.setVisibility(View.VISIBLE);
                        mSeekArc.setVisibility(View.VISIBLE);
                    }

                }.start();

            }
        });
    }

计时器工作了我为totalTimeCountInMilliseconds设置了一个显式整数值;但是,当我使用hourint,minuteint和secondint时,该值可能为零,因为计时器没有启动,这似乎是唯一合理的原因。

我不知道该怎么做才能解决这个问题所以我可以得到整数值并使计时器工作。

编辑:完整代码链接的Pastebin:http://pastebin.com/1wcXHdvX

1 个答案:

答案 0 :(得分:1)

您可以使用

Log.i("YourActivity","Seconds: " + secondsint); 

要检查,您从textviews获得的值是多少。

别忘了添加导入。您可以使用 Ctrl + Shift + O 并选择Android Logcat导入。

<强> EDIT1:

我看了你的代码,你在OnCreateMethod()中调用了setActionListeners()。那没有意义! setActionListeners()从用户获取TextViews的值。但是当系统初始化活动时,用户无法输入值。因此,请在此处致电setActionListeners()

start_timer.setOnClickListener(new View.OnClickListener() {

   setActionListeners();

   @Override
   public void onClick(View view) {
      ...
   }
 ...
}

移动start_timer.setOnClickListener(new View.OnClickListener(){...}) 到onCreateMethod()