我正在尝试使用smoothScrollToPosition(int position)
方法滚动到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 :(得分: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;
}
});
答案 1 :(得分: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)
答案 2 :(得分:0)
您的位置是:
public int getLastIndex() {
int count = 0;
for (int g = 0; g < getGroupCount(); g++)
count += getChildrenCount(g) + 1;
return count;
}
您可以使用它滚动
expandableListView.smoothScrollToPosition(getLastIndex());
但是,如果您在Activity类的smoothScrollToPosition()
方法中调用onCreate()
方法,则应在使用处理程序在屏幕上显示UI后调用smoothScrollToPosition()
方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
expandableListView.smoothScrollToPosition(getLastIndex());
}
},1000);
}
答案 3 :(得分: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);
}
}
}
使用此位置应该会将您带到列表视图的底部。