java - 从 3 个 Textview 获取值并转换为 int 用于倒计时器

标签 java android timer textview countdowntimer

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

enter image description here

当用户在 slider 周围拖动时,他可以更改小时、分钟或秒的 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

最佳答案

您可以使用

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

检查您从 TextView 中获得的值是什么。

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

编辑1:

我查看了您的代码,您正在 OnCreateMethod() 中调用 setActionListeners() 。那没有意义! setActionListeners() 从用户的 TextView 中获取值。但是当系统初始化 Activity 时,用户无法输入值。因此,请在此处调用您的 setActionListeners():

start_timer.setOnClickListener(new View.OnClickListener() {

   setActionListeners();

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

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

关于java - 从 3 个 Textview 获取值并转换为 int 用于倒计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983989/

相关文章:

java - 我可以将 Google 的数据存储区用于桌面应用程序吗?

java - 如何准确计算相对于屏幕尺寸的布局(按钮)高度?

android - 如何在android中创建一个可点击的不规则形状区域?

c# - C# 中的计时器或 webclient 以某种方式保留先前的变量值

ios - ViewController 转换时如何防止计时器重置

java - 如何在两个数据集选项(如 DB)之间使用类似的减法来设计 Redis 搜索/扫描算法

java - 使用 Com4j API 添加附件到 QC 测试用例时出现问题

java - 如何在 RSS android 应用程序中查看来自多个源的提要

android - 使用多个键检索数据 Firebase 实时数据库

在 C 中的线程内定期调用函数