我有2个布局。
第一个加载(WebView)程序启动时很好。
当用户选择菜单项时,第二个也会加载(一个简单的布局):
setContentView(R.layout.simple);
LinearLayout ll = (LinearLayout) findViewById(R.id.simple_layout);
它只是在后台处理某些内容时显示图像。处理完成后,它会尝试切换回(通过处理程序)到它刚刚遮挡的WebView。
setContentView(R.layout.main);
转换似乎发生了但是webview 空白。
为什么?是不是setContentView()
足以切换回第一个布局,就像切换到第二个工作正常一样?
答案 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以及所有这些。包含列表视图。