LINUX.ORG.RU

Как обновить view в listView

 


0

1

Если при создании(в адаптере) написать следующее

((FrameLayout.LayoutParams) textView.getLayoutParams()).setMargins(40,0,0,0);
Работает.(У текста отступ в 40 пикселей слева). Я хочу сделать паралакс эффект при скроллинге. И создается такое впечатление что view не хочет применять параметры которые я ему ставлю(

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
///////// something code/////////

                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    textView.setText("" + topY / 2); // Это работает, таким образом я убедился что пытаюсь добавить отступ нужному textView

                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                    params.setMargins(topY / 2, 0, 0, 0);
                    firstChild.invalidate(); // Не работает(firstChild это "родитель" textView )
                    textView.invalidate();   // Не работает
★★★

Последнее исправление: abs (всего исправлений: 1)

Ответ на: комментарий от mono

setLayoutParams похоже забыл.

Глянь мою соседнею тему, setLayoutParams приводил к жуткой утечки памяти и вылету приложения. Там мне сказала что getLayoutParams() не создает нового объекта, как следствие можно работать со старым

abs ★★★
() автор топика
Ответ на: комментарий от abs

Я бы на твоём месте сделал кастомный вью с нужными методами, которые бы выполняли необходимую логику со смещениями.

Изменять LayoutParams во время скролла – это очень-очень плохая затея.

mono ★★★★★
()

смена layoutParams скорее всего приводит к перерасчету содержимого listview, а это вызовет onScroll и у тебя возникает зацикливание, возможно оно и вызывает утечку. Чтобы не было зацикливания контейнер должен иметь фиксированный размер.

kazufukurou
()
Ответ на: комментарий от kazufukurou

смена layoutParams скорее всего приводит к перерасчету содержимого listview, а это вызовет onScroll и у тебя возникает зацикливание, возможно оно и вызывает утечку.

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

if (lastBottom.get(i) != bottom) {
  do something;
  lastBottom.put(i, bottom);
} 
Тем самым проблема вроде исправилась.

abs ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.