Android 在不重新创建活动的情况下在备选布局之间进行更改

Android 在不重新创建活动的情况下在备选布局之间进行更改,android,xamarin,android-activity,layout,orientation,Android,Xamarin,Android Activity,Layout,Orientation,最初,我的活动只有一个布局,并使用以下属性来避免重新创建活动,从而在屏幕旋转时向数据库发送新请求: ConfigurationChanges=ConfigChanges.Orientation | ConfigChanges.ScreenSize 后来,我决定使用景观模式的替代布局。问题是,由于上述属性,我的应用程序从未切换到该替代布局。因此,我删除了它们,它开始在陆地空间/纵向布局之间切换,但现在我面临的问题是,活动在每次重新创建时都会向DB发送新请求 如何使用替代布局并避免重新创建活动

最初,我的活动只有一个布局,并使用以下属性来避免重新创建活动,从而在屏幕旋转时向数据库发送新请求:

ConfigurationChanges=ConfigChanges.Orientation | ConfigChanges.ScreenSize

后来,我决定使用景观模式的替代布局。问题是,由于上述属性,我的应用程序从未切换到该替代布局。因此,我删除了它们,它开始在陆地空间/纵向布局之间切换,但现在我面临的问题是,活动在每次重新创建时都会向DB发送新请求

如何使用替代布局并避免重新创建活动

    protected override void OnCreate(Bundle savedInstanceState)
            {
                AllLinesFromBatch = new List<WhseActivLine>();
                Orders = new List<WhseActivHeader>();

                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.NextOrder);

                var backBtn = FindViewById<Button>(Resource.Id.buttonBack);
                backBtn.Click += BackBtn_Click;

                var startBtn = FindViewById<Button>(Resource.Id.buttonStart);
                startBtn.Enabled = false;
                startBtn.Click += StartBtn_Click;

                notificationsArea = FindViewById<TextView>(Resource.Id.notificationsNextorder);
                notificationsArea.Text = string.Empty;

                var dsHeaders = Utility.WsHueckmann.GetDataWhseActivHeaders(PickActivity.CheckedZonesList.ToArray(), LoginActivity.User);

....other code.....
            }

是调用DB的地方。

如果问题只是DB请求,我认为最简单的方法是创建一个应用程序全局变量,并在活动中执行以下操作:

if (globalDsHeaders == null){
var dsHeaders = Utility.WsHueckmann.GetDataWhseActivHeaders(PickActivity.CheckedZonesList.ToArray(), LoginActivity.User)
globalDsHeaders = dsHeaders
}
else {
dsHeaders = globalDsHeader
}
....

让我知道这是否有用。

我不完全了解您试图做什么,但我认为您应该覆盖所述的启动器活动的
onConfigurationChanged


您可以找到一个答案,如何为不同的屏幕方向使用不同的资源

您是否尝试在OnConfiguration Changed方法中管理内容?@MeLine您能更具体一点吗?在我的案例中,OnConfiguration应该如何更改?对不起,我以前从来没有用过这种方法,因为GlobaldSheaders应该靠定向生存changes@MeLine当然它可以在应用程序类中定义。我按照您的建议解决了这个问题。我之所以将此标记为答案,是因为它是第一个。好的,但我如何更改为OnConfiguration Changed中的替代布局?我想我明白了,但我的两个布局具有完全相同的名称“NextOrder.axml”,只是文件夹不同。简单地调用
SetContentView(Resource.Layout.NextOrder)
是不起作用的,因为它不知道使用哪一个。还是我错了?
if (globalDsHeaders == null){
var dsHeaders = Utility.WsHueckmann.GetDataWhseActivHeaders(PickActivity.CheckedZonesList.ToArray(), LoginActivity.User)
globalDsHeaders = dsHeaders
}
else {
dsHeaders = globalDsHeader
}
....