2

我目前有一个创建视图的活动。此视图使用其他类(例如创建随机整数序列的类)。创建视图后,我需要运行一个方法(它将使用位图显示序列)。因此,一旦用户单击“开始游戏”,就会显示此序列。

在 onCreate 方法中设置内容视图后,我尝试调用该方法,但未正确生成序列(全为 0)。我也在 myView 类中使用 onStart 和 onFinishInflate 进行了尝试。

有没有办法在一切都膨胀和初始化后运行这个方法?所以在用户点击“开始游戏”并改变视图后,该方法需要运行。

感谢您的关注。

编辑:一次失败的尝试。

@Override
protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  this.gameView = new GameView(getApplicationContext(), getCellSource(getApplicationContext()));
  setContentView(this.gameView);
  // this.gameView.displaySequence(this.gameView.gameEngine.getGenSequence()); Need this to run once view is displayed.
}
4

1 回答 1

11

尝试使用ViewTreeObserver如下:

final View yourView = View.inflate(....);
    ViewTreeObserver observer = yourView .getViewTreeObserver();

    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            // Do what you need with yourView here...

        }
    });

请注意,函数 removeGlobalOnLayoutListener(this) 在某些 sdk 版本中是不同的。

于 2013-04-30T10:28:28.230 回答