3

我有 2 个布局。

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

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

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

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

setContentView(R.layout.main);

似乎发生了切换,但 webview 是空白的。

这是为什么?setContentView()就像切换到第二个布局一样,切换回第一个布局还不够吗?

4

2 回答 2

6

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

private LinearLayout mainview;
private LinearLayout playerview;

在 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 文件,每个布局一个。这比 Fragments 或其他方法简单得多。

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

于 2012-07-23T01:47:57.333 回答
2

这里的主要问题是您不应该多次调用 setContentView() (如评论中所述)。片段是个好主意,但如果您只是想在 2 个视图之间切换,您也可以使用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();
        }
    }
}

您的屏幕为空白的原因是您必须再次重新启动您的 web 视图。如果您要多次调用 setContentView(),则必须重新获取您的 findViewByIds 和所有这些。包括列表视图。

于 2012-07-23T01:44:00.090 回答