setContentView()不足以在布局之间切换?

时间:2012-07-23 01:30:39

标签: android android-layout

我有2个布局。

第一个加载(WebView)程序启动时很好。

当用户选择菜单项时,第二个也会加载(一个简单的布局):

setContentView(R.layout.simple);
LinearLayout ll = (LinearLayout) findViewById(R.id.simple_layout);

它只是在后台处理某些内容时显示图像。处理完成后,它会尝试切换回(通过处理程序)到它刚刚遮挡的WebView。

setContentView(R.layout.main);

转换似乎发生了但是webview 空白

为什么?是不是setContentView()足以切换回第一个布局,就像切换到第二个工作正常一样?

2 个答案:

答案 0 :(得分:4)

我使用这种方法: 在主程序中:

private LinearLayout mainview;
private LinearLayout playerview;

on onCreate:

LayoutInflater inflater = LayoutInflater.from(this);
setContentView(R.layout.main);
mainview = (LinearLayout) this.findViewById(R.id.main);
playerview = (LinearLayout) inflater.inflate(R.layout.player, null);

然后你可以打电话

setContentView(mainview);

setContentView(playerview);

随时随地。 您只需要两个布局xml文件,每个布局一个。这比片段或其他方法简单得多。

出于某种原因,我不必夸大我开始的主视图,只需要夸大其他视图。我认为这是因为setContentView()必须在调用时为你充气。

答案 1 :(得分:2)

这里的主要问题是您不应多次调用setContentView()(如注释中所述)。片段是一个好主意,但如果您只想在两个视图之间进行切换,也可以使用ViewFlipper。 取自http://blog.kerul.net/2011/07/viewflipper-examplea-simple-flashcard.html

的示例
   Button next,previous;
    ViewFlipper vf;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        next = (Button) findViewById(R.id.Button01);
        previous = (Button) findViewById(R.id.Button02);
        next.setOnClickListener(this);
        previous.setOnClickListener(this);
        vf=(ViewFlipper)findViewById(R.id.ViewFlipper01);
    }

    //@Override
    public void onClick(View v) {
        if (v == next) {
            vf.showNext();
        }
        if (v == previous) {
            vf.showPrevious();
        }
    }
}

屏幕空白的原因是您必须重新启动网页浏览。如果您多次调用setContentView(),则必须重新获取findViewByIds以及所有这些。包含列表视图。

相关问题