Android 创建新线程以更新GUI
我试图做这个愚蠢的“游戏”,我有一个相对的布局和类,从视图扩展。我创建视图,并希望使用线程将它们添加到相对布局中。到现在为止,一直都还不错。我让它工作得很好,小对象视图沿着相对布局向下滚动。然后,我又添加了两个选项屏幕,只有在这些屏幕之后,我才想用滚动视图显示活动。问题是它停止工作时出现以下错误: 08-03 20:13:48.140:E/AndroidRuntime(5152):java.lang.IllegalStateException:指定的子级已具有父级。必须首先对子级的父级调用removeView() 我不能理解这个错误 以下是启动线程和更新UI的函数的示例代码:Android 创建新线程以更新GUI,android,Android,我试图做这个愚蠢的“游戏”,我有一个相对的布局和类,从视图扩展。我创建视图,并希望使用线程将它们添加到相对布局中。到现在为止,一直都还不错。我让它工作得很好,小对象视图沿着相对布局向下滚动。然后,我又添加了两个选项屏幕,只有在这些屏幕之后,我才想用滚动视图显示活动。问题是它停止工作时出现以下错误: 08-03 20:13:48.140:E/AndroidRuntime(5152):java.lang.IllegalStateException:指定的子级已具有父级。必须首先对子级的父级调用rem
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
context = this.getApplicationContext();
/*load all bitmaps*/
loadBitmaps();
/*get all the activities components*/
gameCanvasRL = (RelativeLayout)findViewById(R.id.gameCanvasRL);
playerScoreTV = (TextView)findViewById(R.id.playerPoints);
/*GameManager instance*/
manager = GameManager.getInstance();
/*Start Threads*/
startAllThreads();
}
private void startAllThreads() {
refreshCanvasHandler = new Handler();
spawnHandler = new Handler();
refreshCanvasThread = new Thread(new RefreshCanvasTask());
spawnTask = new Thread(new spawnTask());
refreshCanvasThread.start();
spawnTask.start();
}
class RefreshCanvasTask implements Runnable {
@Override
public void run() {
while(true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
refreshCanvasHandler.post(new Runnable() {
@Override
public void run() {
refreshCanvas();
}
});
}
}
}
私有void刷新画布(){
内胚芽大小
/*Move all germs*/
manager.moveGerms();
germSize = manager.getGerms().size();
if(gameCanvasRL.getChildCount() > 0)
gameCanvasRL.removeAllViews();
for(int i = 0; i < germSize; i++) {
gameCanvasRL.addView(manager.getGerms().get(i));
}
}
/*移动所有细菌*/
manager.moveGerms();
germSize=manager.getGerms().size();
如果(gameCanvasRL.getChildCount()>0)
gameCanvasRL.removeallview();
for(int i=0;i
该错误表示您正在尝试添加已添加到另一个视图中的视图。一个视图可能只有一个父视图,因此第二个add会引发异常。在将其添加到新的父项之前,您需要将其从原始父项中删除。您建议如何操作?在哪里?问题是,在清单中,当我把这个活动作为主要活动时,它工作得很好。如果我开始这项活动的目的是它停止工作=/