Вопросы о Android ListViews и ArrayAdapters - PullRequest
0 голосов
/ 25 апреля 2011

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

У меня есть два метода.Первый метод берет мой ArrayList, добавляет две строки и публикует их в виде списка.Большой!

Второй мой метод вызывается, когда я нажимаю на кнопку.Он добавляет новую строку и обновляет список, но для того, чтобы обновить существующее представление списка, мне пришлось снова выполнить строку «setListAdapter (new ArrayAdapter ....»), и я не уверен, правильно ли этоdo.

Я могу использовать некоторые данные, пожалуйста, спасибо!

Метод 1:

static final List list = new ArrayList();
private void showEvents (Cursor cursor){
        list.add("foo");
        list.add("bar");
        Log.d(TAG,"showevent");
        setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem, list));



    }

Метод 2 (вызывается, когда я нажимаю кнопку подlistView):

private void updateListView(){
        try{
            list.add("son");
            setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem, list));


        }catch (Exception e){
            Log.d(TAG, "E="+e);
        }
    }

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

Вместо повторной установки адаптера списка, вызовите notifyDataSetChanged () в ArrayAdapter. Вышеприведенное «сработает», но оно заставляет перерисовать весь ListView, поэтому, если у вас длинный список и пользователь прокрутил его, он вернет их обратно наверх. Уведомление - более чистый способ сделать это.

Очень простой код. У меня есть ссылка на адаптер массива в активности в этом случае:

adapter.notifyDataSetChanged();

Вот пример, основанный на вашем коде:

static final List list = new ArrayList();
ArrayAdapter adapter;

private void showEvents (Cursor cursor){
    list.add("foo");
    list.add("bar");
    Log.d(TAG,"showevent");

    adapter = new ArrayAdapter<String>(this, R.layout.singleitem, list)
    setListAdapter(adapter);
}

private void updateListView(){
    try{
        list.add("son");
        adapter.nofityDataSetChanged();
        // not needed anymore
        //setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem, list));
    }catch (Exception e){
        Log.d(TAG, "E="+e);
    }
}
0 голосов
/ 25 апреля 2011

объявляет переменную-член для ArrayAdapter (скажем, myAdapter), а затем инициализирует ее в методе showEvents и присваивает ей listView.затем в методе updateListView после добавления строки в список просто вызовите myAdapter.notifyDataSetChanged();, и это должно сработать

...