在expandablelistview中的屏幕顶部移动/滚动单击的listitem视图

时间:2013-05-10 13:01:22

标签: android view expandablelistview

当我在移动屏幕顶部点击展开的群组项时,我看到SimpleExpandableListAdapter示例。我创建了NewAdapter,扩展了 BaseExpandableListAdapter。我想做同样的事情,但不知道该怎么做。我搜索了许多对我不起作用的东西。请让我知道怎么做。 先谢谢你。

3 个答案:

答案 0 :(得分:2)

这个适合我

expandList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

            if (!parent.isGroupExpanded(groupPosition)) {
                parent.expandGroup(groupPosition);
            } else {
                parent.collapseGroup(groupPosition);
            }
            parent.setSelectedGroup(groupPosition);

            return true;
        }
    });

作为滚动的主要工作部分是

parent.setSelectedGroup(groupPosition);

这可以解决你的问题。

答案 1 :(得分:1)

您正在寻找的是,

public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) 
{
    myListview.setSelectionFromTop(position, 5);
}

这会将您选择的列表项目定位为屏幕上的第一个可见项目。但是,如果没有任何平滑的滚动动画,当您点击该项目时,它就会成为可见的第一个项目。

如果您想要滚动动画,可以使用

public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) 
{
    int offset = position - myListview.getFirstVisiblePosition();
    if(myListview.getFirstVisiblePosition() > 0)
        offset -= 1;

    myListview.smoothScrollByOffset(offset);
}

请注意,smoothScrollByOffset可从API级别11开始提供。

但是,如果您选择靠近列表底部的项目,这两种方法都将无效,因为如果最后一个列表项可见,列表将不会向上滚动。要解决此问题,您可以将列表视图转换为circular listview,如此处所述。

答案 2 :(得分:1)

我认为使用持续时间可以提供更好的用户体验。所以你可以使用它,并添加持续时间。将项目平滑地滚动到列表视图的顶部。

int duration = 500;  //miliseconds
int offset = 0;      //fromListTop

listview.smoothScrollToPositionFromTop(position,offset,duration);
  • 减少持续时间以使滚动更快