findViewById返回null - Android - setContentView

时间:2012-04-23 23:09:34

标签: android layout null views findviewbyid

我在构建布局时遇到了麻烦。我的情况是这样的:

我有一个Activity运行并且具有为普通和横向定义的布局,但它们是在运行时从onCreate()构建的。

onCreate()中,我调用setContentView(my_normal_layout),然后将其添加到使用大量addView()等处,并且工作正常。但是我也在尝试构建我的横向布局,但是当我尝试使用findViewById()获取我的基本布局时,问题就是res/layout-land中存储的布局文件的一部分,它返回{{1} }。

现在我已经查看了具有null返回问题的人的解决方案,但人们建议必须先执行null。但是我不想将内容视图设置为我的横向布局,我只希望在旋转屏幕时发生这种情况(它自动执行此操作?)。

那么有没有人知道如何解决使用setContentView并更改未设置为内容视图的视图的问题?

我可以发布所需的任何代码行,但我希望这些解释足够好。 谢谢,

约什

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您在两个不同的布局文件中有不同的UI元素。

如果是这种情况,那么您仍然可以将布局文件命名为相同(/res/layout中的一个和/res/layout-land中的一个)并使用setContentView(...)自动对正确的布局文件进行充气。< / p>

之后,您需要知道的是当前方向(纵向或横向),以便知道使用findViewById(...)调用哪些代码位。

您可以使用...

找到方向
getWindowManager().getDefaultDisplay().getOrientation();

如果您使用的是API 8(Android v2.2)或更高版本,则不推荐使用上述内容,但您应拨打getRotation()而不是getOrientation()

请参阅Display.getOrientation()