0
Fragments
の変更に問題があります。 私のアプリではTimerTisk
を毎秒TextView
(ユーザーのためのタイマー)を更新するために使用します。Fragment
にはNullPointerException
があります。私はなぜこれが起こっているのか知っていますが、ユーザが自分で停止するまで、自分のタイマーが働くので、私はTimerTask
を止められません。バックグラウンドでタイマーが動作する方法をこの問題を解決するにはどうすればよいですか? マイFragment
:我々はFragment
を変更するまでTimerTaskを停止せずにフラグメントを変更する方法。 Android
public class WalkingFragment extends Fragment implements View.OnClickListener {
private String timeTxt = "";
TextView textViewWalkingTimer;
Button startWalkingBC;
private Timer walkingTimer;
private int period = 0;
private boolean flag = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_walking, container, false);
textViewWalkingTimer = (TextView) view.findViewById(R.id.textViewWalkingTimer);
startWalkingBC = (Button) view.findViewById(R.id.start_walking);
startWalkingBC.setOnClickListener(this);
return view;
}
public void startWalkingButtonClick() {
if (!flag) {
walkingTimer = new Timer();
walkingTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerForWalking();
}
}, 0, 1000);
startWalkingBC.setText("Stop");
flag = true;
} else if (flag) {
period = 0;
if (walkingTimer != null) {
walkingTimer.cancel();
flag = false;
textViewWalkingTimer.setText("");
startWalkingBC.setText("Start");
}
}
}
private void TimerForWalking() {
this.getActivity().runOnUiThread(Timer_Tick);
}
private Runnable Timer_Tick = new Runnable() {
@Override
public void run() {
period++;
timeTxt = (new SimpleDateFormat("hh:mm:ss")).format(new Date(period * 1000));
textViewWalkingTimer.setText(timeTxt);
}
};
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.start_walking:
startWalkingButtonClick();
break;
.................
default:
break;
}
}
}
コードは、正常に動作します。私はAndroid
の新しいと私の最初のアプリです。助けてくれてありがとう。
ありがとうございました。試してみます。 – Tash