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

时间:2018-01-14 17:22:19

标签: android xamarin android-activity layout orientation

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

ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize

后来我决定为横向模式使用另一种布局。问题是我的应用程序从未切换到替代布局,因为上述属性。所以,我删除它们,它开始在landspace / portrait layout之间切换,但现在我面临同样的问题,即活动在每次重新创建时向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.....
            }

在上面的代码中

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

是对DB进行调用的地方。

2 个答案:

答案 0 :(得分:4)

如果问题只是数据库请求,我认为最简单的方法是创建一个Application全局变量,并在您的活动中执行类似的操作:

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

让我知道这是否有用。

答案 1 :(得分:1)

我无法全面了解您的目标,但我认为您应该覆盖here所述的启动器活动的onConfigurationChanged

Here您可以找到答案,如何针对不同的屏幕方向使用不同的资源