【问题标题】:Getting value from 3 Textviews and converting to int for Countdown Timer从 3 个 Textviews 中获取价值并转换为 int 用于倒数计时器
【发布时间】:2014-09-18 23:25:52
【问题描述】:

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

当用户在scrubber 中拖动时,他可以将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

【问题讨论】:

    标签: java android timer textview countdowntimer


    【解决方案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()

    【讨论】:

    • 如何获得正确的值?
    • 因为我不打算让它为零
    • @XiJiaopin 编辑了我的答案。你应该看看,方法实际上做了什么以及它们是如何工作的。也可以在 Android API 的官方文档中查看更多内容。
    • 好的,我明白了。会做。此外,当我将 start_timer.setOnClickListener 移动到 onCreate 时,我在 setActionListeners 中收到一个错误,说这是一个无效的方法声明。试着找出原因
    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多