Commonsware Drag Drop постоянно уменьшает высоту строки - PullRequest
0 голосов
/ 11 января 2012

Я включил перетаскивание, и класс TouchListView отлично работает. Однако в моем случае у меня есть строки различной высоты из-за моего адаптера, который содержит EditText, который может иметь несколько строк. Поэтому после того, как я уронил, все мои строки конвертируются в tlv: normal_height, который в моем случае составляет 74dip. Это заставляет много строк обрезать весь мой текст в EditTexts. Я попытался повторно инициализировать мой адаптер (mylistview.setAdapter = myadapter), установив для ListView значение GONE, затем VISIBLE и invalidateViews (), но, кажется, ничто не сбрасывает ListView обратно до того, как я перетащил его, если не оставить действие и вернуться обратно. Что здесь можно сделать? -Thx

tlv:normal_height="74dip"
tlv:expanded_height="128dip"

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Я отредактировал метод unExpandViews (), называемый getAdapter (), и для каждого элемента в моем адаптере установил высоту 0, а затем все строки вернули в исходное состояние.Я также обошел удаление части метода, так как он не относится ко мне.

private void unExpandViews(boolean deletion) {

            int height_saved = 0;

            CheckBoxifiedTextListAdapter cbla = (CheckBoxifiedTextListAdapter)getAdapter();

            for (int i = 0;i < cbla.getCount(); i++) 
            {
                    //View v = getChildAt(i);

                    View v = cbla.getView(i, null, null);

                    //if (v == null) 
                    //{      
                           /*
                            if (deletion) 
                            {
                                    // HACK force update of mItemCount
                                    int position = getFirstVisiblePosition();
                                    int y = getChildAt(0).getTop();
                                    setAdapter(getAdapter());
                                    setSelectionFromTop(position, y);
                                    // end hack
                            }
                            layoutChildren(); // force children to be recreated where needed
                            v = getChildAt(i);

                            if (v == null) 
                            {
                                    break;
                            }
                            height_saved = v.getHeight();
                            */
                    //}
                    //else

                    //height_saved = v.getHeight();

                    if (isDraggableRow(v)) 
                    {
                        ViewGroup.LayoutParams params = v.getLayoutParams();
                        params.height = 0;
                        v.setLayoutParams(params);
                        v.setVisibility(View.VISIBLE);
                    }
            }
    }
0 голосов
/ 11 января 2012

Нет сомнений в том, что оригинальный код AOSP был разработан для одинаковой высоты строк, и вся конструкция expanded_height была там, чтобы предоставить пользователю пространство для визуализации места падения.

Одна отправная точкавероятно, было бы создать TouchListAdapter миксин-интерфейс (похожий на SpinnerAdapter), где normal_height и expanded_height будут извлекаться динамически из адаптера на основе position, а не фиксированных значений, объявленных в макете.Я не могу сказать, достаточно ли одного этого или нужно будет проделать дополнительную работу.

Если вы найдете решение, исправления приветствуются.В противном случае, я, вероятно, посмотрю на это когда-нибудь, но не очень скоро.

Мои извинения за то, что у меня нет краткосрочной серебряной пули.

...