1

私は4つのクラスを持っています、

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

のボタンをクリックするFirstActivtyと、残りの3つのアクティビティにランダムに移動します。たとえば、次のコードで私はPlay3.class...ハンドラーを3秒間実行するように設定しました。私の問題はrun()、3秒間クリックするbackButtonと、に移動しFirstActivity.class、3秒間後に、run()再びランダムループに移動することです(、、Play_1)。今、私はクリックしたときだけに永久に行きたいです。私は何をすべきか?Play_2Play_3FirstActivity.classbackButton

(注:3秒の時間が経過した後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 に答える