У меня есть 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();
}
}