等待setContentView()方法

时间:2013-04-10 18:11:46

标签: android android-layout

调用setContentView()后获取有关视图的信息时遇到问题。点击按钮后我正在改变活动的布局。这是我的代码示例。

public void onClickButton1(View v) {
    setContentView(R.layout.activity_main);
    setScreen(); 
}

但是在执行setScreen()方法时,布局仍然没有呈现,所以我不能在布局中的某个视图上调用getWidth()(我可以但我总是得到0)。我怎么能等到setContentView()完成?请注意使用此:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    setScreen();
}       

对我来说还不够。我需要在活动周期中独立改变布局。

2 个答案:

答案 0 :(得分:0)

没有简单的方法可以使用setContentView()来获得您想要的结果。您需要完全删除所有视图,然后为新布局充气,使用ViewFlipper在不同视图之间切换,或者,这是恕我直言的最佳方法,修改您的应用以使用Fragments

答案 1 :(得分:0)

您需要将ViewTreeObserver附加到您的布局:

    setContentView(R.layout.yourLayoutName);
    View yourLayout = findViewById(R.id.ID_OF_YOUR_LAYOUT);
    ViewTreeObserver vto = yourLayout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            //Do your work
            vto.removeOnGlobalLayoutListener(this);
        }
    });