2016-07-18 2 views
0

Fragments을 변경하는 데 문제가 있습니다. 내 앱에서 TimerTiskTextView 초마다 업데이트 (사용자 용 타이머)하고 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

관련 문제