Добавить нижний колонтитул в Android TouchListView - PullRequest
2 голосов
/ 15 июля 2011

Привет, я использую элемент управления TouchListView отсюда: https://github.com/commonsguy/cwac-touchlist, и я добавил несколько кнопок для добавления в список в нижнем колонтитуле:

    mFooter = getLayoutInflater().inflate(R.layout.edit_homepage_footer_layout, null);
    mListView = (TouchListView) findViewById(R.id.sectionList);
    mListView.addFooterView(mFooter);

Кажется, всеработает нормально, пока я не перетаскиваю элемент в списке, после чего нижний колонтитул сворачивается (до высоты одного элемента списка, я думаю), скрывая добавленные мной кнопки.?

1 Ответ

2 голосов
/ 15 июля 2011

Я действительно решил это вскоре после того, как спросил (всегда так ...)

Проблема заключается в методах doExpansion () и unExpandViews (), которые изменяли каждый элемент в списке, включая нижний колонтитул,Чтобы исправить это, я создал метод, чтобы проверить, имеем ли мы дело с перетаскиваемым элементом или нижним колонтитулом:

private boolean isDraggableItem(View view) {
    View dragger = view.findViewById(grabberId);
    return dragger != null;
}

, а затем изменил методы, упомянутые следующим образом:

private void unExpandViews(boolean deletion) {
    for (int i = 0; ; i++) {
        View v = getChildAt(i);
        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;
            }
        }
        if (isDraggableItem(v)) { //check this view isn't the footer
            ViewGroup.LayoutParams params = v.getLayoutParams();
            params.height = mItemHeightNormal;
            v.setLayoutParams(params);
            v.setVisibility(View.VISIBLE);
        }
    }
}

private void doExpansion() {
    Log.d(logTag, "Doing expansion");
    int childnum = mDragPos - getFirstVisiblePosition();
    if (mDragPos > mFirstDragPos) {
        childnum++;
    }

    View first = getChildAt(mFirstDragPos - getFirstVisiblePosition());

    for (int i = 0; ; i++) {
        View vv = getChildAt(i);
        if (vv == null) {
            break;
        }
        int height = mItemHeightNormal;
        int visibility = View.VISIBLE;
        if (vv.equals(first)) {
            // processing the item that is being dragged
            if (mDragPos == mFirstDragPos) {
                // hovering over the original location
                visibility = View.INVISIBLE;
            } else {
                // not hovering over it
                height = 1;
            }
        } else if (i == childnum) {
            if (mDragPos < getCount() - 1) {
                height = mItemHeightExpanded;
            }
        }
        if (isDraggableItem(vv)) { //check this view isn't the footer
            ViewGroup.LayoutParams params = vv.getLayoutParams();
            params.height = height;
            vv.setLayoutParams(params);
            vv.setVisibility(visibility);
        }
    }
}

Было быСтоит обновить проект github, чтобы включить это, я думаю.

...