我在不同的文件夹中有3个布局:
1. layout / HomeLayout.axml (其中 layout 是布局的文件夹,HomeLayout.axml是全局的axml文件)。
2. layout-large-port / HomeLayout.amxl (其中 layout-large-port 是一个大型(显示维度)肖像的文件夹,HomeLayout.axml是axml文件)。
3. layout-large-land / HomeLayout.axml (其中 layout-large-land 是一个大型(展示维度)景观的文件夹,HomeLayout.axml是axml文件)。
在此活动中,我将ListView包含一些数据,当我将手机从 人像 转到 风景 ,我需要保存我在纵向模式下的所有内容(listview上的每个内容都有不同的内容,如按钮 / textview 等)并显示在风景。
那么现在做了什么。在HomeActivity上我声明了这个:
ConfigurationChanges=Android.Content.PM.ConfigChanges.Orientation
此代码段运行良好,但问题很严重:轮换后(从纵向到横向)仍然是布局纵向。我该如何解决这个问题?
此外,我尝试覆盖方法OnConfigurationChanged
:
public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
{
base.OnConfigurationChanged (newConfig);
if(newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
{
SetContentView(Resource.Layout.ProductsLayout); //system understand that now is Landscape and put correct layout;
}
else
{
SetContentView(Resource.Layout.ProductsLayout); //same here
}
所以这种方法对我没有帮助,因为当我正在旋转手机时,布局设置正确但没有数据(listview为空),之后,当我试图从返回时横向到纵向,布局设置正确但列表为空 有什么建议吗?
PS抱歉我的英文!
答案 0 :(得分:0)
Android会在配置发生变化时完全破坏并重新创建您的活动;该活动中的所有视图及其保存的数据也将被丢弃。
来自Android docs:
警告:您的活动每次都会被销毁并重新创建 用户旋转屏幕。当屏幕改变方向时, 系统会破坏并重新创建前台活动,因为 屏幕配置已更改,您的活动可能需要加载 替代资源(例如布局)。
在配置更改之间保持数据的标准机制是使用Activity
的{{3}}回调保存视图数据,然后使用OnCreate
回调提供的包恢复数据
这是如何操作的一个粗略示例:
public class MainActivity : Activity
{
public const string ARG_LIST_STATE = "list_state";
ListView _listView;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
if (bundle != null) {
// Existing data to restore!
if (bundle.ContainsKey (ARG_LIST_STATE)) {
var listState = bundle.GetStringArray (ARG_LIST_STATE);
// TODO: Restore state into list view.
}
}
}
protected override void OnSaveInstanceState (Bundle outState)
{
string[] listState= new string[5]; // TODO: Grab data from the list view and serialize it into the outState
outState.PutStringArray(ARG_LIST_STATE, listState);
base.OnSaveInstanceState (outState);
}
}
另一个例子是Xamarin OnSaveInstanceState
提供的。
我强烈建议您查看here,以便更好地了解Android如何管理活动。
答案 1 :(得分:0)
解决方案是(对我来说)为肖像制作可接受的设计,它没有不同的横向模式(只使用 sum_weight 等机制)。