在Java中运行活动时,是否可以将布局切换到其他布局?

在Java中运行活动时,是否可以将布局切换到其他布局?,java,android,android-layout,Java,Android,Android Layout,我不想在当前布局中移动视图,而是想知道是否可以在程序运行时加载不同的布局 例如,在创建时,我将使用: setContentView(R.layout.layout1); setContentView(R.layout.layout2); 然后在点击式侦听器中,我将使用: setContentView(R.layout.layout1); setContentView(R.layout.layout2); 我这样说是因为我使用的是一个自定义对话框,它阻止我生成一个对话框来覆盖它。我尝试过,

我不想在当前布局中移动视图,而是想知道是否可以在程序运行时加载不同的布局

例如,在创建时,我将使用:

setContentView(R.layout.layout1);
setContentView(R.layout.layout2);
然后在点击式侦听器中,我将使用:

setContentView(R.layout.layout1);
setContentView(R.layout.layout2);

我这样说是因为我使用的是一个自定义对话框,它阻止我生成一个对话框来覆盖它。我尝试过,但到目前为止只收到错误。我真的很想知道这是否可行。

这是可能的,但风险很大,不推荐用于最终产品。问题是,一旦切换视图,就无法访问已定义的视图。您需要为新布局重新分配所有这些参数。因此,切换内容视图后,请重新初始化所有视图以及引用旧布局的任何内容。从旧布局调用视图将导致崩溃或错误消息

正如CodeMagic所说,最好使用片段和FragmentManager。事实上,这不是一种稳定的方法来产生好的代码。我建议使用单独的片段和backbackback等,这样不仅可以让游戏正常运行,还可以轻松导航回原始片段,而不是使用可能无法正常工作的临时代码

调用setContentViewR.id.yourLayout后,需要重新实例化所有其他视图。比如说你使用了一个ImageView视图来显示颜色的变化,那么你需要在设置ContentViewr.id.yourLayout之后实例化这个ImageView,这样它就从新的布局中提取,而不是引用原始的布局

例如:

ImageView imageView;

public void onCreate(Bundle b){
    super.savedInstanceState(b);
    setContentView(originalLayout);
    //Instatiate all of your original Views.
    imageView = (ImageView) R.id.yourImageView;
}


public void onButtonClick(View){
    setContentView(newLayout);
    imageView = (ImageView) R.id.yourNewImageView;
    //All other views
}
如果您需要片段管理器解决方案的示例,请点击此处:
看看他们的一些例子,看看如何正确地做你想做的事情。

这通常不是一个好主意,IMHO,而且可能会变得一团糟。最好使用片段、切换活动或采取其他行动。如果您确切地告诉我们您正试图完成什么,以及为什么您以前的尝试没有成功,那么我们可能可以建议一种更好的方法。我正在使用自定义对话框发送信息。但是,当出现错误时,我希望显示一条消息,说明错误。但是,自定义对话框不允许创建其他对话框。此外,我认为在当前布局中更改视图比更改布局需要更多的时间。PS:因为它是我的应用程序中包含的一部分,你认为即使它效率很低,我也可以改变布局。一个想法是,如果对你有用的话,你可以使用另一个带有对话框主题的活动,而不是你拥有的对话框。这将允许您创建错误对话框。我不确定那是什么设计。是的,你当然可以改变布局,但我不知道这是最好的方法。您的意思是更改对话框或活动的布局?更改对话框的布局。会给你你需要的。然后,您可以在以对话框为主题的活动中打开错误对话框。由于用户必须退出对话框,因此我不需要切换回去,您能提供一个代码示例吗?