如何在没有TimerTask停止的情况下更改片段。 Android的

时间:2016-07-18 17:59:13

标签: android android-fragments timer timertask

我在更改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中的新用户,这是我的第一款应用。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您创建的片段将保持活跃状态​​,直到父Activity还活着。我建议您使用Activity来传递启动计时器的片段,以存储其值并在另一个片段中检索它。 另外,我建议您检查this以查看如何沟通它们。

希望它有所帮助。