4

UIを毎分変更するアプリケーションを作成しようとしていますが、postAtTime関数をトリガーできないため、非常に苦労しています。postDelayで試してみましたが、動作しますが、postAtTimeを使用するとより正確になります。

現在の時刻を取得してカレンダーを設定し、日付に分を追加してpostAtTimeを呼び出しましたが、トリガーされません。あなたが私を助けることができるかどうか見てみましょう。

   private Runnable showMinute = new Runnable() {
    public void run() {
        calendar = Calendar.getInstance();
        minute = calendar.get(Calendar.MINUTE);
        minute = minute % 10;

        switch (minute){
        case 0: numero.setImageResource(R.drawable.b0);
            break;
        case 1: numero.setImageResource(R.drawable.b1);
            break;
        case 2: numero.setImageResource(R.drawable.b2);
            break;
        case 3: numero.setImageResource(R.drawable.b3);
            break;
        case 4: numero.setImageResource(R.drawable.b4);
            break;
        case 5: numero.setImageResource(R.drawable.b5);
            break;
        case 6: numero.setImageResource(R.drawable.b6);
            break;
        case 7: numero.setImageResource(R.drawable.b7);
            break;
        case 8: numero.setImageResource(R.drawable.b8);
            break;
        case 9: numero.setImageResource(R.drawable.b9);
            break;
        default:
            break;
        }


        handler.removeCallbacks(mostrarHora);
        calendar.add(Calendar.MINUTE, 1);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        handler.postAtTime(showMinute, calendar.getTimeInMillis());
    }
  };
4

2 に答える 2

10

Calendar(クラスからの)絶対時間を使用しています。時間形式は、起動からのhandler.postAtTime量です。ms

計算に使用する必要がありSystemClock.uptimeMillis()ます。

于 2012-06-15T15:14:27.737 に答える
4

さてようやく解決しました。誰かが同じ問題を抱えている場合、これが解決策です。

 private Runnable mostrarHora = new Runnable() {
    public void run() {
        int segundo;
        long start, diferencia;
        calendar = Calendar.getInstance();
        diferencia = calendar.getTimeInMillis()-SystemClock.uptimeMillis();
        segundo = calendar.get(Calendar.MINUTE);
        segundo = segundo % 10;

        switch (segundo){
        case 0: numero.setImageResource(R.drawable.b0);
            break;
        case 1: numero.setImageResource(R.drawable.b1);
            break;
        case 2: numero.setImageResource(R.drawable.b2);
            break;
        case 3: numero.setImageResource(R.drawable.b3);
            break;
        case 4: numero.setImageResource(R.drawable.b4);
            break;
        case 5: numero.setImageResource(R.drawable.b5);
            break;
        case 6: numero.setImageResource(R.drawable.b6);
            break;
        case 7: numero.setImageResource(R.drawable.b7);
            break;
        case 8: numero.setImageResource(R.drawable.b8);
            break;
        case 9: numero.setImageResource(R.drawable.b9);
            break;
        default:
            break;
        }


        handler.removeCallbacks(mostrarHora);
        calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE)+1);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        start = calendar.getTimeInMillis()-diferencia;
        handler.postAtTime(mostrarHora, start);
    }
  };
于 2012-06-15T16:09:32.797 に答える