我在更改Fragments
时遇到问题。
在我的应用中,我使用TimerTisk
每秒更新TextView
(用户计时器),当我们更改Fragment
时,我们NullPointerException
。我知道为什么会这样,但我不能停止TimerTask
,因为我的用户计时器应该工作,直到用户自己停止。如何解决这个问题,计时器如何在背景中工作?
我的Fragment
:
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;
}
}
}
代码工作正常,直到我们更改Fragment
。我是Android
中的新用户,这是我的第一款应用。非常感谢您的帮助。
答案 0 :(得分:0)
您创建的片段将保持活跃状态,直到父Activity
还活着。我建议您使用Activity来传递启动计时器的片段,以存储其值并在另一个片段中检索它。
另外,我建议您检查this以查看如何沟通它们。
希望它有所帮助。