2013-02-28 60 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