ExpandableListView中的smoothScrollToPosition

时间:2011-12-22 12:36:47

标签: android scroll expandablelistview android-animation

我正在尝试使用smoothScrollToPosition(int position)方法滚动到ExpandableListView的底部,但由于我不知道如何计算位置属性而失败。

都不是

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:我如何(平滑)滚动到API级别8 +上ExpandableListView的底部?

4 个答案:

答案 0 :(得分:0)

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;
    }
});

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

您的位置是:

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

您可以使用它滚动

expandableListView.smoothScrollToPosition(getLastIndex());

但是,如果您在Activity类的smoothScrollToPosition()方法中调用onCreate()方法,则应在使用处理程序在屏幕上显示UI后调用smoothScrollToPosition()方法:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .....
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            expandableListView.smoothScrollToPosition(getLastIndex());
        }
    },1000);
}

答案 3 :(得分:0)

使用的位置取决于每个组是否扩展。如果该组已展开,请将其所有子项添加到位置计数中。否则,不要!

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);
        }
    }
}

使用此位置应该会将您带到列表视图的底部。