2014-07-01 78 views
0

而不是在当前布局中移动视图,我想知道是否可以在程序运行时加载不同的布局。在Java中运行时,是否可以将布局切换到其他布局?

例如在上创建我会用:

setContentView(R.layout.layout1); 

,然后在上点击收听我会用:

setContentView(R.layout.layout2); 

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

+0

这是但不是一个好主意,恕我直言,并可能变得混乱。你最好使用片段,切换活动或采取其他行动。如果你确切地告诉我们你想要完成什么,以及为什么你以前的尝试没有奏效,那么我们可能会提出一个更好的方法。 – codeMagic

+0

我正在使用自定义对话框来发送信息。但是,当出现错误时,我想显示一条消息说错误。但是,自定义对话框不允许创建另一个对话框。此外,我认为改变目前布局周围的视图需要更多的时间比如果我改变了布局周围。 PS:由于它是我的应用程序的一部分,你认为即使它效率低下,我也可以改变布局。 – jamesgates1

+0

一个想法是,您可以使用其他活动与对话框主题,如果这可以为​​你工作,而不是你有的对话框。这将允许您创建错误对话框。不确定的设计。是的,你一定可以改变布局,但我不知道这是最好的方法。你的意思是改变你的对话或活动的布局? – codeMagic

回答

0

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

就像CodeMagic说的那样,最好使用fragment和FragmentManager来做到这一点。实际上,这不是一个稳定的方法来生成良好的代码。我建议使用单独的片段并使用backstack等,以便您的游戏不仅可以工作,而且可以轻松导航回原始片段,而不是使用几乎不起作用的临时代码。

在调用了setContentView(R.id.yourLayout)之后,您需要重新实例化所有其他视图。所以就像说你使用一个ImageView视图来显示颜色的变化,那么你需要实例化该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 
} 

如果您需要的片段Manager解决方案的一个例子去这里:https://developer.android.com/training/basics/fragments/creating.html ,并通过他们的一些例子看就怎么properly做你正在尝试做的。

+0

由于我不需要切换回用户将不得不退出对话框,你能提供一个代码示例吗? – jamesgates1

相关问题