私はこれが本当に必要ではないと知っていますが、ハンドラーとメッセージの概念を練習したいと思います。 CountDownTimerを拡張したクラスを書きました。 onTickでは、私はメッセージをキューに送りました、クラスがフラグメント上にinstatiatedされているので、それはUIキューだと私は知っています。 Fragment IでHandlerを宣言し、handleMessageをオーバーライドして、TextViewをメッセージのタイマーパスで更新しようとしました。 UIフラグメントとCountDownの両方で、ハンドラはgetMainLooperを取得しますが、両方ともすでにUIスレッド上にあると思います。 メッセージが送信されているのが見えますが、断片のテキストビューは更新されていません。 ここで私が紛失しているものを見てください。CountDownTimerをハンドラーへのメッセージ付きの呼び出し側フラグメント
public class GuitarExerciseTimer extends CountDownTimer {
Handler mHandler = new Handler(Looper.getMainLooper());
public void onTick(long millisUntilFinished) {
final String guitarExerciseTimerS = String.format(Locale.getDefault(), "Time Remaining %02d min: %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60);
Message completeMessage = Message.obtain();
completeMessage.obj = guitarExerciseTimerS;
// completeMessage.setTarget(mHandler);
Log.d("TEST","prepare message" + " " + guitarExerciseTimerS);
//completeMessage.sendToTarget()
mHandler.sendMessage(completeMessage);
;
}
public class GuitarFocusedExerciseFragment extends Fragment{
GuitarExerciseTimer timer = new GuitarExerciseTimer (30000, 1000);
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.d ("TEST","Inside handelMessage");
String timer = (String) msg.obj;
guitarExerciseTimer.setText(timer);
}
};
TextView guitarExerciseTimer;
}
どのような問題がありますか?何かエラーがありますか? – Juan
いいえ、私はHandelMessageの中にログを入れましたが、それは決して同じスレッドやループではないと思いますが、ハンドラ(フラグメントとカウントダウンクラス)がmainLooperを取得すると思います。 @元 – amir
だから問題は、メッセージが表示されないということですか? – Juan