【问题标题】:Android layout only showing after oncreate method finishesAndroid 布局仅在 oncreate 方法完成后显示
【发布时间】:2012-08-06 19:54:48
【问题描述】:

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

因此,在 Android 中的 onCreate 方法中,我的初始布局由带有持卡人图像的卡片组成,然后我在 onCreate 方法中运行一个方法来处理卡片。我遇到的问题是初始布局根本没有出现。显示的是已填充持卡人的最终布局。该程序甚至没有显示它们,因为它们是单独处理的

我是 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() 方法时,会显示占位符卡。当我把它放回去时,占位符卡没有出现,只有发牌出现。

【问题讨论】:

    标签: android layout freeze oncreate


    【解决方案1】:

    您应该将填充卡片的代码移动到您的活动的onResume() 方法中 - 可能是某种AsyncTaskonResume() 启动,随着时间的推移完成工作,以便用户可以直观地看到更改。

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

    Google 有 some good online documentation 了解活动生命周期的工作原理。

    【讨论】:

    • 我认为 onStart() 可能是一个更好的选择,因为当您的应用程序返回到前台时也会调用 onResume() ...您可能不想在这种情况下重新处理.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多