0

簡単なJAVAカードゲームを作成しました(私が思っていたもの)。JAVAでは、ゲームはレイアウト(フレーム)をロードし、各プレーヤーのカード所有者の画像のような正方形で構成されるImageButtonを表示します。カード所有者は、デッキからランダムなカードを1枚ずつ入力します。

そのため、AndroidのonCreateメソッドでは、最初のレイアウトはカードホルダーの画像を含むカードで構成され、次にonCreateメソッドでメソッドを実行してカードを配ります。私が抱えている問題は、初期レイアウトがまったく表示されないことです。表示されるのは、カード所有者がすでに入力されている最終的なレイアウトです。個別に処理されているため、プログラムには表示されません。おそらくAsyncTaskを実行する必要があると思いましたが、dealメソッドには、それを必要とするような「主要な」命令はありません。

私はAndroid開発に比較的慣れていないので、非常に単純なものが元のレイアウトをハングアップさせるのではないかと思いますが、onCreateメソッドから呼び出されるメソッドではない場合、メインのアプリケーション命令はどこに行きますか?元のレイアウトを表示してから、カードを1枚ずつ更新してUIスレッドを続行するだけの簡単な方法ではないのはなぜですか?

アップデート:

残念ながら、それでも機能しません。私のonCreateは次のようになります。

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            player1Card1B = (ImageButton) findViewById(R.id.p1C1Bref);
            player1Card2B = (ImageButton) findViewById(R.id.p1C2Bref);
            player1Card3B = (ImageButton) findViewById(R.id.p1C3Bref);
            player2Card1B = (ImageButton) findViewById(R.id.p2C1Bref);
            player2Card2B = (ImageButton) findViewById(R.id.p2C2Bref);
            player2Card3B = (ImageButton) findViewById(R.id.p2C3Bref);
            player3Card1B = (ImageButton) findViewById(R.id.p3C1Bref);
            player3Card2B = (ImageButton) findViewById(R.id.p3C2Bref);
            player3Card3B = (ImageButton) findViewById(R.id.p3C3Bref);
            player4Card1B = (ImageButton) findViewById(R.id.p4C1Bref);
            player4Card2B = (ImageButton) findViewById(R.id.p4C2Bref);
            player4Card3B = (ImageButton) findViewById(R.id.p4C3Bref);

            newDeckCard = (ImageButton) findViewById(R.id.newCardDeckBref);
            discardDeckCard = (ImageButton) findViewById(R.id.discardCardDeckBref);
            knockButton = (ImageButton) findViewById(R.id.knockBref);

            player1Card1B.setOnClickListener(this);
            player1Card2B.setOnClickListener(this);        
            player1Card3B.setOnClickListener(this);
            newDeckCard.setOnClickListener(this);
            discardDeckCard.setOnClickListener(this);
            knockButton.setOnClickListener(this);
    }

and my onStart like this:

     @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();


        shuffle();
        deal();
    }

「メイン」と表示された白い画面が表示され、最終的にカードはすでに入力されていることが示されます。onCreateメソッドで読み取られるプレースホルダーも取得しません。Deal()メソッドを削除すると、プレースホルダーカードが表示されます。戻すと、プレースホルダーカードは表示されず、配られたカードだけが表示されます。

4

1 に答える 1

0

カードを作成するコードをアクティビティのonResume()メソッドに移動する必要があります。ユーザーが変更を視覚的に確認できるように、時間の経過とともに作業をAsyncTask開始するようなものです。onResume()

このonResume()メソッドは、Android が実際にアクティビティを画面に表示するときに呼び出されます。すべての作業を行うonCreate()と、アプリが画面に表示される前にすべての作業が完了します。これにより、表示されている結果が生成されます。

Google には、アクティビティのライフサイクルがどのように機能するかについての優れたオンライン ドキュメントがあります。

于 2012-08-06T20:26:59.857 に答える