ListView не обновляется в пользовательской ViewGroup - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть пользовательская группа просмотра, которая позволяла моему экрану перемещаться вправо, когда я вызываю кнопку меню, позволяя появиться второй макет (мое меню).

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

, когда я приступаю к этому действию, содержимое моего listView не обновляется при поступлении данных.но когда я нажимаю кнопку меню, открывается вид и отображается содержимое моего списка (без изображений, которое появляется при прокрутке моего списка).

здесь - событие, которое было отменено, когда кнопка менюнажата:

public void customScroll(final int i) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                if (i == 0) {
                    for (int inc = 200; inc >= 0; inc -= 5) {
                        final int inc2 = inc;
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                               //cvg is the implementation of my customViewGroup
                                cvg.scrollTo(inc2);
                            }
                        });
                        try {

                            synchronized (this) {
                                wait(5);
                            }

                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                } else {
                    for (int inc = 0; inc <= 200; inc += 5) {
                        final int inc2 = inc;
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                cvg.scrollTo(inc2);
                            }
                        });
                        try {

                            synchronized (this) {
                                wait(5);
                            }

                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        }).start();

И это поток, который запускается в "runOnUiThread" при загрузке моих данных:

private Runnable returnRes = new Runnable() {

        @Override
        public void run() {
            if (doubleVideos != null && doubleVideos.size() > 0) {
                videoAdapter.notifyDataSetChanged();
                for (int i = 0; i < doubleVideos.size(); i++) {
                    videoAdapter.add(doubleVideos.get(i));
                }
            }
            videoAdapter.notifyDataSetChanged();
}

поведениемоей деятельности довольно странно, спросите меня, если вы не понимаете.я пробовал уже пробовал:

cvg.invalidate();
            cvg.scrollTo(20);
            //listView.notify();
            listView.refreshDrawableState();
            cvg.refreshDrawableState();
            listView.bringToFront();
            listView.invalidate();
            cvg.invalidate();
            listView.refreshDrawableState();

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

1 Ответ

0 голосов
/ 13 ноября 2018

У меня была такая же проблема раньше .., я думаю, вы не реализовали ViewGroup надлежащим образом! В пользовательской ViewGroup вызовите метод measure для каждого дочернего элемента перед вызовом метода layout для onLayout.

...