Проблемы с обновлением Monodroid ListView - PullRequest
2 голосов
/ 10 февраля 2012

Только что начал с Monodroid, и сейчас я работаю над ListView.Я добавил список в ArrayAdapter, и я правильно вижу свои первые два элемента.Однако, когда я добавляю третий элемент в список, просмотр списка не обновляется.Даже при том, что я называю notifyDataSetChanged ().

private ArrayAdapter<string> la;
private ListView list;
private List<String> dayData = new List<String>();

protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            this.SetContentView(Resource.Layout.TestLayout);


            dayData.Add(" Test");
            dayData.Add(" Test2"); // Theese two elements shows up fine

            list = this.FindViewById<ListView>(Resource.Id.menuList);
            la = new ArrayAdapter<string>(this, Resource.Layout.list_item, dayData);
            list.Adapter = la;
            list.TextFilterEnabled = true;

            dayData.Add(" Test3"); // This one is not shown
            la.NotifyDataSetChanged();


        } // OnCreate

Любые подсказки на том, что я пропустил?

Ответы [ 5 ]

2 голосов
/ 11 февраля 2012

Нашел решение сам на другом форуме. Каким-то образом ArrayAdapter не принимает к сведению изменения списка при использовании списка. Вместо этого используйте Android.Runtime.JavaList.

Вы можете найти обсуждение здесь: http://mono -for-android.1047100.n5.nabble.com / Update-ListView-when-dataset-changes-td4757874.html

Работает как шарм! :)

0 голосов
/ 11 июня 2013

Для обновления ListView

private ListView lvAnuncios = null;

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

        this.lvAnuncios = this.FindViewById<ListView>(Resource.Id.MisAnuncios_lvAnuncios);
    }

    private void ReloadListView()
    {
        if (this.lvAnuncios.Adapter != null)
        {
            this.lvAnuncios.Adapter.Dispose();
            this.lvAnuncios.Adapter = null;
        }

                                      //Class that inherits  de ArrayAdapter
        this.lvAnuncios.Adapter = new adAnuncio(this, Resource.Layout.FilaListViewAnuncio, csVariable.objUsr.lstAnuncios);
    }
0 голосов
/ 29 апреля 2013

Я не уверен, насколько это кому-нибудь поможет, но в моем случае это работает нормально.

У меня есть класс ViewModel, который хранит все данные, которые я обновляю в приложении, и запускаю действие «Обновление коллекции» при изменении коллекции.

// All within ViewModel.cs

private Action SearchResultsUpdated;

private List<SearchResult> m_oSearchResults;

Public List<SearchResult> SearchResults
{
    get
    {
        if (m_oSearchResults == null)
            m_oSearchResults = new List<SearchResult> ();
        return m_oSearchResults;
    }
    set
    {
        if (value != m_oSearchResults)
        {
            m_oSearchResults = value;
            //
            // Fire update event
            if (SearchResultsUpdated != null)
                SearchResultsUpdated ();
        }
    }
}

Затем я добавляю обработчик для этого события в классе адаптера.

// All within SearchResultsAdapter.cs

public class SearchResultsAdapter : BaseAdapter<SearchResult>
{
.
.
    // Constructor
    public SearchResultsAdapter (Activity oContext)
        : base ()
    {
        // Add handler for list refresh
        ViewModel.SearchResultsUpdated += NotifyDataSetChanged;
        //
        m_oContext = oContext;
    }
}

Внутри адаптера я использую коллекцию ViewModel.SearchResults в качестве контекста данных для представления списка. Надеюсь, что это помогает и достаточно тщательно, чтобы все могли понять.

0 голосов
/ 10 февраля 2012

попробуйте это Добавить la.notifyDataSetInvalidated ();после la.NotifyDataSetChanged ();

0 голосов
/ 10 февраля 2012

Я не совсем уверен, но я думаю, что элементы копируются в ArrayAdapter, поэтому вам нужно сделать следующее:

la.Add(" Test3");

, если вы хотите сохранить список таким жепридется добавить его и к list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...