2

私のアプリにはタイマーがありますオリエンテーションがすべての4方向に変更された場合、タイマーを再起動します。私はOnconfigurationchanged()メソッドを追加することで達成しようとしましたが、それは呼び出さず、私のために働いています。オリエンテーションの変更時にアプリケーションを再起動(作成)

MainActivity.class

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i("tag","oncreate changed"); 
     setContentView(R.layout.activity_main); 
     timer = (AppCompatEditText)findViewById(R.id.editText); 
     totalHoursText = (TextView)findViewById(R.id.totalhoursText); 
     startButton = (Button)findViewById(R.id.button); 
     stopButton = (Button)findViewById(R.id.button1); 
     totalHoursText.setVisibility(View.INVISIBLE); 

     startButton.setOnClickListener(this); 
     stopButton.setOnClickListener(this); 
     handler = new Handler(); 


    } 


    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     Log.i("tag", "orientation changed"); 

     int orientation = newConfig.orientation; 
     switch (orientation) { 
      case Configuration.ORIENTATION_LANDSCAPE: 
       Log.i("tag", "orientation changed landscape"); 
       // Checks the orientation of the screen 
       if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
       } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
       } 
     } 
    } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.button : 
       Time time = new Time(); 
       time.setToNow(); 
       flag=true; 
       startTime = time.toMillis(false); 
       handler.postDelayed(updateTimerThread,0); 
       totalHoursText.setVisibility(View.INVISIBLE); 

       break; 

      case R.id.button1: 
       timer.setText("00:00"); 
       flag=false ; 
       handler.removeCallbacksAndMessages(updateTimerThread); 
       break; 
     } 

    } 


    private Runnable updateTimerThread = new Runnable() { 

     String str; 
     public void run() { 


      if(flag) { 
       Time time = new Time(); 
       time.setToNow(); 

       timeInMilliseconds = time.toMillis(false) - startTime; 
       updatedTime = timeSwapBuff + timeInMilliseconds; 


       int secs = (int) (updatedTime/1000); 
       int mins = secs/60; 
       secs = secs % 60; 
       int milliseconds = (int) (updatedTime % 1000); 


       int sec = (int) (updatedTime/1000) % 60; 
       int min = (int) ((updatedTime/(1000 * 60)) % 60); 
       int hr = (int) ((updatedTime/(1000 * 60 * 60)) % 24); 

       str = "" + String.format("%02d", hr) + ":" 
         + String.format("%02d", min) + ":" 
         + String.format("%02d", sec); 


       timer.setText("" + String.format("%02d", hr) + ":" 
         + String.format("%02d", min) + ":" 
         + String.format("%02d", sec)); 

       handler.postDelayed(this, 0); 
      } 
     else{ 
       totalHoursText.setVisibility(View.VISIBLE); 
       totalHoursText.setText(str); 
      } 
     } 

    }; 

提案やコードスニペットで私を助けてください。

答えて

1

android:configChanges="orientation|screenSize"このプロパティをAndroidManifest.xmlactivityタグに追加してみてください。その後、デバイスが回転している場合、onConfigurationChangedがトリガーされます。

+0

お返事ありがとうございましたが、マニフェストを追加するだけでオリエンテーションにOncreateを呼び出すことができます。 –

+0

@ young_08私は自分の答えを編集するだけです。 –

+0

うん、今は完璧に動作しています。手伝ってくれてありがとう 。アップしてください! –

関連する問題