2011-12-22 70 views
2

我想滚动到ExpandableListViewsmoothScrollToPosition(int position)方法的底部,但失败,因为我不知道如何计算位置属性。smoothScrollToPosition在ExpandableListView

无论

adapter.getGroupCount() 

也不

adapter.getChildrenCount(getGroupCount()-1); 

也不

public int getLastIndex() { 
    int count = 0; 
    for (int g = 0; g < getGroupCount(); g++) 
     count += getChildrenCount(g) + 1; 
    return count; 
} 

的伎俩。

TLDR:我如何(平滑)滚动到API级别8+上的ExpandableListView的底部?

+0

在什么情况下你试图调用这个方法,我的意思是你想在什么情况下实现这个功能? – teoREtik 2011-12-25 16:42:17

回答

0
expandableListView.setOnGroupClickListener(new OnGroupClickListener() { 

    @Override 
    public boolean onGroupClick(ExpandableListView parent, View v, 
      int groupPosition, long id) { 
     // TODO Auto-generated method stub 
     parent.smoothScrollToPosition(groupPosition); 
     return true; 
    } 
}); 
+0

这应该滚动到单击的项目,而不是最后的位置。没有? – caiocpricci2 2012-10-26 10:20:42

0
listView.post(new Runnable() { 
    @Override 
    public void run() { 
     listView.smoothScrollToPositionFromTop(listView.getCount()*2, 0, 5000); 
    } 
}); 

ExpandableListView.post()等待列表完成加载的项目。 ExpandableListView.getCount()拿到项目(组和儿童)的计数

提供一个持续时间,从而在列表不滚动,快速(方法需要API 11) smoothScrollToPositionFromTop(int position, int offset, int duration)

0

你计算出的位置:

public int getLastIndex() { 
    int count = 0; 
    for (int g = 0; g < getGroupCount(); g++) 
     count += getChildrenCount(g) + 1; 
    return count; 
} 

你可以用它来滚动

expandableListView.smoothScrollToPosition(getLastIndex()); 

但是,如果调用01在活动类的onCreate()方法方法,应该调用smoothScrollToPosition()方法是通过使用处理程序在屏幕上显示UI后:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ..... 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      expandableListView.smoothScrollToPosition(getLastIndex()); 
     } 
    },1000); 
} 
+0

感谢提示,但'smoothScrollToPosition'不在初始化阶段调用。 – Mannaz 2014-11-28 12:11:39

0

使用的位置取决于每个组是否被扩展或没有。如果组展开,则将其所有子项添加到位置计数。否则,不要!

int getPosition(ExpandableListView listView, ExpandableListViewAdapter adapter) { 
    int position = 0; 
    for (int group = 0; group < adapter.getGroupCount(); ++group) { 
     position += 1; 
     if (listView.isGroupExpanded(group)) { 
      position += adapter.getChildrenCount(group); 
     } 
    } 
} 

使用此位置应该将您带到列表视图的底部。