ListView не обновляется при вызове notifyDataSetChanged () - PullRequest
0 голосов
/ 26 мая 2010

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

public void populateTimeline(){
        Thread populate = new Thread(){
            public void run(){
                Looper.prepare();
                InputStream data = getData(serviceURL);  //gets a jsonarray of posts from server  $ post_list
                if(data!= null)
                    try {

                            String jsonString = responsetoString(data);
                            Log.d(TAG, jsonString);
                            PostList list = getPostList(jsonString);
                            List <PostContainer> post_list = list.getPostContainterList(); 
                            PostContainer pc;
                            for (int i = 0; i < post_list.size(); i++) {            
                                pc = post_list.get(i);
                                mObjectList.add(pc.getPost()); //Adding each post to the list
                                Log.d(TAG, pc.post.username);
                                Log.d(TAG, pc.post.message);
                            }

                    } catch (Exception e) {
                        Log.d(TAG, "Exception" + e.getMessage());
                        e.printStackTrace();
                    }
                Looper.loop();              
            }

        };
        populate.start();
    }

После вызова этой функции адаптер списка был уведомлен об изменении в наборе данных, вызвав

adapter.notifyDataSetChanged();

в основной теме. Но список не обновляется. Для следа я добавил кнопку в верхней части списка и снова вызвал populateTimeline () и затем notifyDataSetChanged () при нажатии кнопки. Удивительно, но на этот раз все сообщения появляются в ListView.

Что нужно сделать, чтобы обновить просмотр списка без нажатия кнопки?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Я использовал Gson для разбора Json и занимал немного слишком много времени для разбора массива json и заполнения списка, что привело к вызову adapter.notifyDataSetChanged даже до того, как в списке произошли какие-либо изменения. Поэтому я переместил notifyDataSetChanged в функцию и вызвал ее после задержки (Thread.sleep ()), которая решила проблему.

0 голосов
/ 26 мая 2010

adapter.notifyDataSetChanged (); должен вызываться в пользовательском интерфейсе / основном потоке

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