XAMARIN : программно созданный макет, потерянный во время навигации по странице между различными действиями

#xamarin #xamarin.forms #xamarin.android

Вопрос:

Я создал форму Xamarian.

 <LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   <ScrollView
        android:id="@ id/configureScroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@ id/dynamicLinearlayout"
            android:orientation="vertical"/>
   </ScrollView>
</LinearLayout>
 

Программно добавлен макет для компоновки внутри представления прокрутки.

 LinearLayout dynamicL;
protected override void OnCreate(Bundle savedInstanceState)
{
    //.....
    dynamicL = FindViewById<LinearLayout>(Resource.Id.dynamicLinearLayout);
}
var layout = new LinearLayout(this);
layout.Orientation = Orientation.Horizontal;
layout.Id = 500;
Button btnRemove = new Button(this);
btnRemove.Text = "-";
btnRemove.TextAlignment = TextAlignment.Center;
layout.AddView(btnRemove);

//Add to scroll layout
dynamicL.AddView(layout);
 

Как только я перехожу на другую страницу и возвращаюсь, она теряет макет. как я могу его сохранить?

После динамического добавления просмотров на страницу.введите описание изображения здесь

Как только я перейду на домашнюю страницу и вернусь. введите описание изображения здесь

Ответ №1:

Я создаю один пример навигации между различными видами деятельности и возвращаюсь, макет все еще отображается, пожалуйста, посмотрите следующий код.

Activity_main.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:orientation="vertical">
  <ScrollView
    android:id="@ id/configureScroll"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@ id/dynamicLinearlayout"
        android:orientation="vertical"/>
</ScrollView>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:text="btn" 
    android:id="@ id/button1"/>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:text="navigation" 
    android:id="@ id/button2"/>
</LinearLayout>
 

MainActivity.cs:

  public class MainActivity : AppCompatActivity
{
    private Button btn;        
    private LinearLayout dynamicL;
    private Button btn1;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        btn = FindViewById<Button>(Resource.Id.button1);
        btn.Click  = Btn_Click;
        btn1 = FindViewById<Button>(Resource.Id.button2);
        btn1.Click  = Btn1_Click;
        dynamicL = FindViewById<LinearLayout>(Resource.Id.dynamicLinearlayout);              
    }

    private void Btn1_Click(object sender, EventArgs e)
    {
        var intent = new Intent(this, typeof(Activity1));
        StartActivity(intent);
    }

    private void Btn_Click(object sender, EventArgs e)
    {
        var layout = new LinearLayout(this);
        
        Button btn = new Button(this);
        btn.Text = "btn";
        btn.TextAlignment = Android.Views.TextAlignment.Center;
        layout.AddView(btn);
        dynamicL.AddView(layout);
    }
    
}
 

Когда вы нажимаете кнопку для перехода к другому действию, нажмите кнопку «Вернуться» на устройстве, макет все еще отображается.

Комментарии:

1. Это означает, что кнопка с именем btn все еще существует? Если да, то чем он отличается от моего кода? Я особенно не вижу никакой разницы.

2. Можете ли вы также прикрепить фотографию до и после?