2013-02-28 59 views
1

我有4個班,的Android +如何中斷處理程序的循環(run()中)

  1. FirstActivity
  2. Play_1
  3. Play_2
  4. Play_3

onClicking按鈕在FirstActivty,我會隨機去其餘的三個活動。 例如,在下面的代碼中,我來到Play3.class ...我已經設置然後處理程序運行3秒。 我的問題是在run()時間3秒,如果我點擊backButton,它會去FirstActivity.classrun()時間在3秒後,它再次將隨機循環(Play_1Play_2Play_3)。現在,只有當我點擊backButton時,我纔想要永久轉到FirstActivity.class。我該怎麼辦?

(注意:的run()時間三秒後,我高興地將主屏幕不過,在此期間,run()時間後,只有我想中斷循環並返回到主屏幕)

class listener implements OnClickListener { 

    @Override 
    public void onClick(final View v) { 

     switch (v.getId()) { 
      case R.id.play3_image1: 
       bt1.setVisibility(View.GONE); 
       bt2.setVisibility(View.GONE); 
       bt3.setVisibility(View.GONE); 
       bt4.setVisibility(View.GONE); 
       bt5.setVisibility(View.GONE); 
       bt6.setVisibility(View.VISIBLE); 

       try { 
        new Handler().postDelayed(new Runnable() { 

         @Override 
         public void run() { 
          Random rand = new Random(); 
          int x = rand.nextInt(3) + 1; 

          Intent intent = new Intent(); 

          switch (x) { 
           case 1: 
            intent.setClass(v.getContext(), Play_1.class); 
            break; 
           case 2: 
            intent.setClass(v.getContext(), Play_2.class); 
            break; 
           case 3: 
            intent.setClass(v.getContext(), Play_3.class); 
            break; 
           default: 
            break; 
          } 
          startActivity(intent); 
         } 
        }, 3000); 
       } catch (Exception e) { e.printStackTrace(); } 
      } 

     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 

      if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ 
       Intent i = new Intent(Play_3.this,Example.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
      } 
      return super.onKeyDown(keyCode, event); 
     } 
    } 
} 
+2

爲什麼不添加布爾變量skip = false;並用true填充它後面的按鈕?然後在運行處理程序之前檢查變量是否跳過== true。 – 2013-02-28 11:41:27

回答

1

處理程序對象提供的其他職位的方法,可以幫助你:

  • 隨着postAtFrontOfQueue(Runnable r)您可以張貼在下一循環要執行的可運行。
  • 使用removeCallbacksAndMessages(Object token)您可以刪除給定的可運行或消息或使用null參數清除處理隊列。

使用這些實用程序,您應該能夠輕鬆處理狀態chanes。

注意:由於您使用的是主線程活套,因此您不應該在您的處理程序對象上調用getLooper()。quit(),因爲這會阻止您的應用程序(如果不完全崩潰)。

+0

嗨,@allprog,我也拿過他們之前,但如何實現是問題。這一次終於如何爲我工作。所以非常感謝您的幫助。 「removeCallbacksAndMessages(null)」解決了小問題。 – sai 2013-03-01 07:19:55