2016-12-02 6 views
0

現在の時刻を示すコードをHH:mm:ss形式で実装しようとしています。私はそうすることができましたが、システム時間からまだ時間差があるようです。コードはFragmentに実装されており、次のとおりです。Android:TextViewの現在の時刻にタイムラグがあります

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_alarm_list, null); 

    tvCurrentTime = (TextView) view.findViewById(R.id.tvCurrentTime); 
    tvCurrentTime.setText("H"); 
    timeHandler.sendEmptyMessage(0); 

    return view; 
} 
Handler timeHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     runClock(); 
     timeHandler.sendEmptyMessageDelayed(0, 1000); 
    } 
}; 

private void runClock() { 
    Calendar calendar = Calendar.getInstance(); 
    tvCurrentTime.setText(String.format("%02d:%02d:%02d", 
      calendar.get(Calendar.HOUR_OF_DAY), 
      calendar.get(Calendar.MINUTE), 
      calendar.get(Calendar.SECOND))); 
} 

タイムラグは約0.5〜1秒のようです。このコードを実行すると、スクリーンショットが表示されます。

enter image description here

+2

を使用してみてください... 001、TextClockます。https:// developer.android.com/reference/android/widget/TextClock.htmlこれを試してください。 – zerocool

答えて

0

それはあなたのタイマーが0に様々な位置で実行できることを意味し、システムからの秒と同期していないとして、あなたは遅れを持っている理由は、timeHandlerによるものである - 1000年ミリ秒。間隔を小さくすると正しいと見なす可能性が高まりますが、タイマーの開始時に応じて修正されません。 02:59:001、16:03:00:

あなたは16のような特定の周期で実行するハンドラにそれのためpostAtTimeを使用することができます

0

適切このコードの動作を確認してください。

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

View view = inflater.inflate(R.layout.fragment_alarm_list, null); 

tvCurrentTime = (TextView) view.findViewById(R.id.tvCurrentTime); 
tvCurrentTime.setText("H"); 
timeHandler.sendEmptyMessage(0); 

return view; 
} 
Handler timeHandler = new Handler() { 
public void handleMessage(Message msg) { 
    runClock(); 
    timeHandler.sendEmptyMessageDelayed(0, 500); 
} 
}; 
private void runClock() { 
Calendar calendar = Calendar.getInstance(); 
tvCurrentTime.setText(String.format("%02d:%02d:%02d", 
     Calendar.getInstance().get(Calendar.HOUR_OF_DAY), 
     Calendar.getInstance().get(Calendar.MINUTE), 
     Calendar.getInstance().get(Calendar.SECOND))); 
} 
関連する問題