smoothScrollToPosition в ExpandableListView - PullRequest
       18

smoothScrollToPosition в ExpandableListView

2 голосов
/ 22 декабря 2011

Я пытаюсь прокрутить до конца ExpandableListView с помощью метода smoothScrollToPosition(int position), но не получается, потому что я не знаю, как вычислить атрибут position .

Ни

adapter.getGroupCount()

, ни

adapter.getChildrenCount(getGroupCount()-1);

, ни

public int getLastIndex() {
    int count = 0;
    for (int g = 0; g < getGroupCount(); g++)
        count += getChildrenCount(g) + 1;
    return count;
}

сделали трюк.

TLDR: Как можноЯ (плавно) прокручиваю до нижней части ExpandableListView на уровне API 8 +?

Ответы [ 4 ]

0 голосов
/ 30 июля 2017

Используемая позиция зависит от того, расширена ли каждая группа или нет. Если группа расширена, добавьте всех ее дочерних элементов в счетчик позиций. Иначе не надо!

int getPosition(ExpandableListView listView, ExpandableListViewAdapter adapter) {
    int position = 0;
    for (int group = 0; group < adapter.getGroupCount(); ++group) {
        position += 1;
        if (listView.isGroupExpanded(group)) {
            position += adapter.getChildrenCount(group);
        }
    }
}

Использование этой позиции должно привести вас к нижней части списка.

0 голосов
/ 20 ноября 2014
listView.post(new Runnable() {
    @Override
    public void run() {
        listView.smoothScrollToPositionFromTop(listView.getCount()*2, 0, 5000);
    }
});

ExpandableListView.post(), чтобы дождаться окончания загрузки списка. ExpandableListView.getCount() чтобы получить количество предметов (групп и детей)

Укажите длительность, чтобы список не быстро прокручивался (метод требует API 11). smoothScrollToPositionFromTop(int position, int offset, int duration)

0 голосов
/ 27 ноября 2014

Вы рассчитываете позицию:

public int getLastIndex() {
    int count = 0;
    for (int g = 0; g < getGroupCount(); g++)
        count += getChildrenCount(g) + 1;
    return count;
}

Вы можете использовать ее для прокрутки

expandableListView.smoothScrollToPosition(getLastIndex());

Но, если вы вызываете метод smoothScrollToPosition() в onCreate() метод класса ActivityВы должны вызвать метод smoothScrollToPosition() после того, как пользовательский интерфейс отобразится на экране с помощью обработчика:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .....
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            expandableListView.smoothScrollToPosition(getLastIndex());
        }
    },1000);
}
0 голосов
/ 07 февраля 2012
expandableListView.setOnGroupClickListener(new OnGroupClickListener() {

    @Override
    public boolean onGroupClick(ExpandableListView parent, View v,
            int groupPosition, long id) {
        // TODO Auto-generated method stub
        parent.smoothScrollToPosition(groupPosition);
        return true;
    }
});
...