从子类内部重新启动视图

时间:2017-11-18 23:00:12

标签: android view

我的问题可能有点愚蠢,但你能否给我一些建议,告诉我如何最有效地解决以下问题: 我有一个包含Frame布局的Activity,并附带了一些Views。 其中一个视图(是一个SurfaceView和)运行一些图形代码,而这个图形是从另一个线程绘制和更新的。一旦在此视图/线程上执行了某个操作,我想用一个新的SurfaceView替换旧的SurfaceView(基本上重新启动darwing而不会实现整个新活动)。我希望你能帮助我,因为我放弃了xD (P.S.我有一个runOnUiThread来处理替换的动作)

如果你不明白我想要完成什么,请随时问。 谢谢你的帮助;)

编辑:我的代码流图(如果你需要更具体的病,请发送一些实际的代码) Graph of my codeflow

EDIT2: 代码:

public class GameActivity extends Activity{
FrameLayout game;
Game g;
View deathscreen;

public void onCreate(Vundle savedInstanceState){
 game = new FrameLayout(this);
 g = new Game(this);
 deathscreen = LayoutInfalter.from(this).inflate(R.layout.deathscreen, 
null);

 game.addView(deathScreen);
 game.addView(g);
 setContentView(game);
}
public void restartGame(){
 g = new Game(this);
}
}

Game.java{
 Player p;
 GameThread gt;

 public void surfaceCreated(){
  player = new Player();
  gt = new GameThread();
 }
}

GameThread.java extends Thread:
 Game g; //ref to Game instance
 public void run(){

 while(a){
  //lock canvas
  g.update();  //calling Player.update();
  g.draw(canvas);
 } 
}

Player.java:
GameActivity g;
[...]
public void update(){
 if(...){
  g.restartGame();
 }
}

1 个答案:

答案 0 :(得分:1)

尝试重新填充布局并使用setContentView(view)进行设置。这可能有效或可能无效,具体取决于代码的其余部分的设置方式