当我点击移动屏幕顶部的扩展组项目时,我看到了SimpleExpandableListAdapter
的例子。我创建了扩展的NewAdapter
BaseExpandableListAdapter
。我也想做同样的事,但不知道怎么做。我搜索了很多不适合我的东西。请告诉我该怎么做。
这个很适合我
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,如下所述。