Android布局仅在oncreate方法完成后显示

时间:2012-08-06 19:54:48

标签: android layout hang oncreate

我创造了(我认为的)一个简单的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();
    }

我只是得到一个白色的屏幕,上面写着“Main”,然后最终显示的卡已经填充了。我甚至没有得到onCreate方法中读取的占位符。当我删除deal()方法时,占位符卡会显示出来。当我把它放回去时,占位符卡片不显示,只显示已发出的卡片。

1 个答案:

答案 0 :(得分:0)

您应该将填充卡片的代码移动到您的活动的onResume()方法中 - 可能某种AsyncTaskonResume()启动,随着时间的推移,这样用户就可以直观地看到变化。

当Android实际在屏幕上显示您的活动时,会调用onResume()方法;如果您确实在onCreate()中完成了所有工作,那么所有工作都将在您的应用出现在屏幕上之前完成 - 这会产生您所看到的结果。

Google some good online documentation了解了活动生命周期的运作方式。

相关问题