移动/滚动单击列表项视图在屏幕顶部的可扩展列表视图



当我点击移动屏幕顶部的扩展组项目时,我看到了SimpleExpandableListAdapter的例子。我创建了扩展的NewAdapterBaseExpandableListAdapter。我也想做同样的事,但不知道怎么做。我搜索了很多不适合我的东西。请告诉我该怎么做。

这个很适合我

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

我认为使用时长可以提供更好的用户体验。你可以使用这个,加上持续时间。将当前位置的项目平滑滚动到列表视图的顶部。

int duration = 500;  //miliseconds
int offset = 0;      //fromListTop
listview.smoothScrollToPositionFromTop(position,offset,duration);
  • 减少持续时间使滚动更快

你要找的是

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 level 11开始可用。

但是,如果您选择靠近列表底部的项,这两种方法都将不起作用,因为如果最后一个列表项可见,则列表将无法进一步向上滚动。为了克服这个问题,可以将listview转换为圆形listview,如下所述。

最新更新