1

我有4节课,

  1. 第一活动
  2. 播放_1
  3. 播放_2
  4. 播放_3

onClick 中的一个按钮FirstActivty,我会随机进入剩下的三个活动。例如,在下面的代码中,我来到Play3.class...我已将 then 处理程序设置为运行 3 秒。我的问题是在run()3 秒的时间内,如果我点击backButton,它会转到FirstActivity.class3 秒后run(),它会再次进入随机循环(Play_1, Play_2, Play_3)。现在,我想永久转到FirstActivity.class仅当我单击 时backButton。我应该怎么办?

(注意:在完成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);
        }
    }
}
4

1 回答 1

1

Handler 对象提供了其他可以帮助您的 post 方法:

  • postAtFrontOfQueue(Runnable r)您可以发布一个可在下一个循环中执行的可运行文件。
  • removeCallbacksAndMessages(Object token)您可以删除给定的可运行文件或消息,或者使用参数null清除处理队列。

使用这些实用程序,您应该能够非常轻松地处理您的状态通道。

注意:由于您使用的是主线程循环器,因此不应在处理程序对象上调用 getLooper().quit(),因为这会停止您的应用程序(如果没有完全崩溃)。

于 2013-02-28T11:57:49.357 回答