0

アプリケーションに 2 つの SeekBar があります。1 つは時間を示し、もう 1 つは 15 分間隔 (0、15、30、45) で進行します。

時間の初期値を 10.30 に設定しています。変更された時間を TextView に表示しています。

ここで、ユーザーが分シークバー (たとえば 15 分) をインクリメントするだけの場合、textView は 10.45 を表示するはずです。(つまり、10.30 + 00:15)。同様に、ユーザーがさらに分のシークバーを 30 または 45 にインクリメントすると、TextView にはそれぞれ 11:00 と 11:15 が表示されます。

現在、分が最大15分になるまで、すべてが正常に機能します。しかし、SeekBar を 30 または 45 に増やすと、TextView には代わりに 10:60 と 10:75 が表示されます。

これが私のコードです:-

int hourLimit=10, minLimit=30;
    seekBarHour.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
    {


        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {


        }



        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }

        public void onStopTrackingTouch(SeekBar seekBar) 
        {
            if(progressChangedHours == 0 && progressChangedMins==0)
            {
                txtReachingBy.setText("Reaching by:"+" "+String.valueOf(hourLimit)+":"+String.valueOf(minLimit)+":"+today.second);
            }
            if(progressChangedHours==0 && mins >=60)
            {
                hour = 1;
            }
            else
            {
            hour = hourLimit + progressChangedHours;

            }
            timeString = String.valueOf(hour)+":"+String.valueOf(mins)+":"+today.second;
            txtReachingBy.setText("Reaching by:"+" "+timeString);
        }





    }); 

    seekBarMins.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
    {


        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {
            progressChangedMins = progress;
            int stepSize = 15;

            progressChangedMins = (progressChangedMins/stepSize)*stepSize;

        }



        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }

        public void onStopTrackingTouch(SeekBar seekBar) 
        {

            if(progressChangedMins == 0)
            {
                txtReachingBy.setText("Reaching by:"+" "+String.valueOf(hourLimit)+":"+String.valueOf(30)+":"+today.second);
            }
            else
            {


                mins = minLimit +progressChangedMins;
                if(progressChangedHours==0 && mins!=0)
                {
                    hour = hourLimit;
                }
                else if(progressChangedHours>=0 && mins>=60)
                {
                    hour = hour+1;
                    mins = mins-60;
                }


                timeString = String.valueOf(hour)+":"+String.valueOf(mins)+":"+today.second;
                txtReachingBy.setText("Reaching by:"+" "+timeString);
            }
        }



    }); 

編集

: 日付を使用して、問題の一部を次のように解決しました:-

    DateFormat sdf = new SimpleDateFormat("hh:mm:ss");
        Date date;
        try 
        {
            date = sdf.parse(initialTime);
            cal= Calendar.getInstance();
            cal.setTime(date);

            txtReachingBy.setText("Reaching By:"+" "+ cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

seekBarMins.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
        {


            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
            {
                progressChangedMins = progress;
                int stepSize = 15;

                progressChangedMins = (progressChangedMins/stepSize)*stepSize;
                seekBar.setProgress(progressChangedMins);
                if(progressChangedHours ==0 && progressChangedMins!=0)
                {
                    lblLateBy.setText("Late By (Hrs):"+" " + String.valueOf(progressChangedHours) +":"+String.valueOf(progressChangedMins));
                }

                else
                lblLateBy.setText("Late By (Hrs):"+" " + String.valueOf(progressChangedHours) +":"+String.valueOf(progressChangedMins));



            }



            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            public void onStopTrackingTouch(SeekBar seekBar) 
            {

                if(progressChangedMins==0)
                {
                    timeString = cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+today.second;
                }
                else
                {
                cal.add(Calendar.MINUTE, progressChangedMins);

                timeString = cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+today.second;
                }
                txtReachingBy.setText("Reaching by:"+" "+timeString);

            }



        }); 

シークバーのつまみを一度に値にドラッグすると、すべてが正常に機能するようになりました。進行値は初期時間に追加されます。しかし、それを値にドラッグすると、最初の時間は追加で変化し、さらにドラッグすると、進行中の値が最初の時間ではなく新しい時間に追加されます。

私に出力を与える: -

Drag 1-> 15 mins > Time expected 10.45 (Fine)
Drag 2-> 30 mins > Time expected 11.00 Output I get -> 10.45+00.30 = 11.15

どうすればこれを解決できますか?

4

0 に答える 0