2016-07-18 11 views
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の新しいと私の最初のアプリです。助けてくれてありがとう。

答えて

0

あなたが作成するフラグメントは、親Activityが生き残るまで生き続けるでしょう。アクティビティでタイマーを開始する部分を伝え、その値を保存し、別のフラグメントで取得することをお勧めします。 また、thisに連絡して、それらの通信方法を確認することをお勧めします。

希望します。

+0

ありがとうございました。試してみます。 – Tash

関連する問題