У меня есть RelativeLayout с несколькими вложенными LinearLayouts.По умолчанию для LinearLayouts установлено значение видимости, поэтому ни один из них не виден при первой загрузке действия.У меня есть две кнопки, которые должны показывать / скрывать LinearLayouts при нажатии.Все работает отлично, за исключением случаев, когда устройство переориентируется, а атрибуты видимости сбрасываются в значение по умолчанию «ушел» в XML.Как сохранить текущее видимое состояние вида во время изменения ориентации?
Редактировать: Окончательный код для всех, у кого есть проблема.По сути, просто добавьте видимый тег представления в SharedPreferences в пустоте, который меняет видимость, и проверьте его в OnCreate.
[Activity(Label = "My Activity", Theme="@style/TitleBar")]
public class CallManagement : Activity
{
public LinearLayout parts;
public LinearLayout status;
ISharedPreferences p;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.CallManager);
parts = (LinearLayout)FindViewById(Resource.Id.partLayout);
status = (LinearLayout)FindViewById(Resource.Id.statLayout);
p = PreferenceManager.GetDefaultSharedPreferences(this);
var visible = p.GetString("VisibleLayout", null);
if (visible != null && visible != "None")
{
RelativeLayout container = (RelativeLayout)FindViewById(Resource.Id.container);
LinearLayout current = (LinearLayout)container.FindViewWithTag(visible);
changeVisibility(current);
}
Button statusb = (Button)FindViewById(Resource.Id.changeStat);
Button partsb = (Button)FindViewById(Resource.Id.addParts);
statusb.Click += delegate
{
LinearLayout current = status;
changeVisibility(current);
};
partsb.Click += delegate
{
LinearLayout current = parts;
changeVisibility(current);
};
}
void changeVisibility(View v)
{
LinearLayout current = (LinearLayout)v;
parts.Visibility = ViewStates.Gone;
status.Visibility = ViewStates.Gone;
var editor = p.Edit();
if (v.Visibility == ViewStates.Gone)
{
v.Visibility = ViewStates.Visible;
editor.PutString("VisibleLayout", v.Tag.ToString());
}
else
{
editor.PutString("VisibleLayout", "None");
}
editor.Commit();
}
}