アプリケーションに 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
どうすればこれを解決できますか?