我创造了(我认为的)一个简单的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()方法时,占位符卡会显示出来。当我把它放回去时,占位符卡片不显示,只显示已发出的卡片。
答案 0 :(得分:0)
您应该将填充卡片的代码移动到您的活动的onResume()
方法中 - 可能某种AsyncTask
由onResume()
启动,随着时间的推移,这样用户就可以直观地看到变化。
当Android实际在屏幕上显示您的活动时,会调用onResume()
方法;如果您确实在onCreate()
中完成了所有工作,那么所有工作都将在您的应用出现在屏幕上之前完成 - 这会产生您所看到的结果。
Google some good online documentation了解了活动生命周期的运作方式。