0

我创建了(我认为是)一个简单的 JAVA 纸牌游戏。在 JAVA 中,游戏加载布局(框架)并显示 ImageButtons,该按钮由每个玩家的方形持卡人图像组成。然后,持卡人会一张一张地从牌堆中随机抽取卡片。

因此,在 Android 中的 onCreate 方法中,我的初始布局由带有持卡人图像的卡片组成,然后我在 onCreate 方法中运行一个方法来处理卡片。我遇到的问题是初始布局根本没有出现。显示的是已填充持卡人的最终布局。该程序甚至没有显示它们,因为它们是单独处理的我认为也许我需要运行 AsyncTask 但我的处理方法中确实没有任何“主要”指令,这似乎需要它。

我是 Android 开发的相对新手,我想我想知道,如果这么简单的东西会挂起我的原始布局,如果不是从 onCreate 方法调用的方法,主要应用程序指令会去哪里?为什么不只是显示我的原始布局,然后继续 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()所有工作,那么您的应用程序将在您的应用程序出现在屏幕上之前完成 - 这会产生您所看到的结果。

谷歌有一些关于活动生命周期如何工作的很好的在线文档

于 2012-08-06T20:26:59.857 回答