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
}
....