1

SimpleExpandableListAdapter当我在屏幕顶部单击展开的组项目时,我看到了示例。我创建NewAdapter了扩展 BaseExpandableListAdapter。我想做同样的事情,但不知道该怎么做。我搜索了很多不适合我的东西。请让我知道该怎么做。先感谢您。

4

3 回答 3

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

这可以解决你的问题。

于 2015-09-23T06:26:43.800 回答
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 开始可用。

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

于 2013-08-12T19:45:54.040 回答
1

我认为使用持续时间可以提供更好的用户体验。因此,您可以使用它,并添加持续时间。将项目顺利滚动到列表视图的顶部。

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

listview.smoothScrollToPositionFromTop(position,offset,duration);
  • 减少持续时间以加快滚动速度
于 2015-07-03T01:44:45.940 回答