Я провожу простой тест, потому что мне нужно узнать о ListView. Я много искал, и есть МНОГО, но все они пытаются сделать больше, чем просто основы. Чтобы понять концепцию, я написал простую программу и перечислил ее ниже.

Все работает, кроме случаев, когда я поворачиваю телефон. Я понимаю, что это уничтожит Activity, и мне нужно воссоздать список и адаптер. Я не понимаю, почему мой список строк тоже «уничтожен».

Глядя на мой пример - после ротации будут дни недели. А вот списка кликов не будет !! Как правильно использовать список в моем случае? Я не пытаюсь создавать сложные представления строк или настраиваемые адаптеры. Я пойду с основами. Спасибо !

namespace NewListViewTest
{
    [Activity(Label = "NewListViewTest", MainLauncher = true)]
    public class MainActivity : Activity
    {
        Button StartScan;
        Button StopScan;
        TextView Filter;
        ListView IBeaconActivities;
        List<string> dataList;
        ArrayAdapter<string> dataAdapter;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            dataList = new List<string>();
        }

        protected override void OnStart()
        {
            base.OnStart();
            StartScan = FindViewById<Button>(Resource.Id.startScan);
            StartScan.Click += StartScan_Click;

            StopScan = FindViewById<Button>(Resource.Id.stopScan);
            Filter = FindViewById<TextView>(Resource.Id.filter);
            IBeaconActivities = FindViewById<ListView>(Resource.Id.beaconActivities);

            dataAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, dataList);
            IBeaconActivities.Adapter = dataAdapter;

            dataList.Add("Monday");
            dataList.Add("Tuesday");
            dataList.Add("Wednesday");
            dataList.Add("Thursday");
            dataList.Add("Friday");
            dataList.Add("Saturday");
            dataList.Add("Sunday");

            DataWasUpdated();
        }

        public void DataWasUpdated()
        {
            dataAdapter.Clear();
            dataAdapter.AddAll(dataList);

            dataAdapter.NotifyDataSetChanged();
        }

        private void StartScan_Click(object sender, System.EventArgs e)
        {
            dataList.Add("New item at: " + DateTime.Now.ToString("hh:mm:ss"));
            DataWasUpdated();
        }
    }
}
0
public-profile 27 Ноя 2017 в 12:59

1 ответ

Лучший ответ

ListView не обновляется (c #)

Вы можете прочитать документ Жизненный цикл активности Android, когда вы поворачиваете телефон, ваш Activity будет уничтожен и воссоздан заново. Вы можете добавить журнал, чтобы видеть больше информации, например:

protected override void OnPause()
{
    base.OnPause();
    Log.Error(Tag, "OnPause");
}

protected override void OnResume()
{
    base.OnResume();
    Log.Error(Tag, "OnResume");
}

protected override void OnSaveInstanceState(Bundle outState)
{
    base.OnSaveInstanceState(outState);
    Log.Error(Tag, "OnSaveInstanceState");
}

protected override void OnRestoreInstanceState(Bundle savedInstanceState)
{
    base.OnRestoreInstanceState(savedInstanceState);
    Log.Error(Tag, "OnRestoreInstanceState");
}

protected override void OnDestroy()
{
    base.OnDestroy();
    Log.Error(Tag, "OnDestroy");
}

......

Когда вы поворачиваете телефон, вы можете увидеть следующую информацию:

enter image description here

Вот почему ваш ListView будет уничтожен.

Решение :

Добавьте атрибут ConfigurationChanges в свой Activity:

[Activity(Label = "ListActivity", 
    ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
public class ListActivity : Activity

Затем, когда вы поворачиваете телефон, выполните только метод OnConfigurationChanged:

E/Activity (17410): OnConfigurationChanged

Ваш Activity не будет создан, а ваш New item будет существовать.

0
Community 20 Июн 2020 в 09:12