2013-05-10 99 views
0

我看过SimpleExpandableListAdapter例如,当我点击移动屏幕顶部的扩展组项时。我创建了NewAdapter,它扩展了 BaseExpandableListAdapter。我想做同样的事情,但不知道该怎么做。我搜索了很多不适合我的东西。请让我知道该怎么做。 先谢谢您。在expandablelistview的屏幕顶部移动/滚动点击listitem视图

+0

你能澄清这个问题吗? – 2013-05-10 14:46:42

+0

我想在可扩展列表视图中移动屏幕顶部的点击过的listitem – 2013-05-10 18:00:04

回答

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,如下所述。

1

我认为使用持续时间会带来更好的用户体验。所以你可以使用这个,并增加持续时间。将项目顺利滚动到列表视图的顶部。

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

listview.smoothScrollToPositionFromTop(position,offset,duration); 
  • descrease时间,使滚动更快
1

这一个是为我工作

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

可能这个坚持你的问题。