【发布时间】:2015-05-07 12:47:38
【问题描述】:
我的一项活动的 InitView 方法调用了它的属性
protected ListView MainMenu
{
get
{
return FindViewById<ListView>(Resource.Id.mainmenu);
}
}
...它指的是一个 ListView,它定义为我的 Android 项目的“layout”文件夹中的 RelativeLayout“MainMenuLayout.axml”的一部分:
<ListView
android:id="@+id/mainmenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:layout_below="@id/mainmenuHeader"
android:divider="#e5e5e5"
android:dividerHeight="1dp"
android:background="#fff" />
在纵向模式下,这将按预期工作。但是,当切换到横向模式时,上面对 FindViewById 的调用返回 null。据我了解,Android 应该将布局文件夹用于纵向和横向模式。 Resource.designer.cs 还包含
public const int mainmenu = 2131492931;
正如预期的那样。值得注意的是,通过设置 ConfigurationChanges = ConfigChanges.Orientation 和 ConfigChanges.ScreenSize 手动处理方向更改会导致横向模式正常工作。这是 Xamarin 问题,还是我误解了什么?
【问题讨论】:
-
您在 layout-land 文件夹中有第二个文件吗?
-
不,文件夹 layout-land 不存在。 (layout-sw820dp 和 layout-sw720dp-port 可以,但它们都不包含类似命名的 axml 文件)。
-
尝试以横向模式启动并切换到纵向,它会启动吗?会发生什么?
-
你在使用片段吗?
-
以横向模式启动会立即导致 NullReferenceException。我没有使用片段,为什么?感谢您的输入 :) (另外,将视图文件添加到 layout-land 文件夹不会导致任何改进)。