【发布时间】:2016-05-04 22:02:16
【问题描述】:
我遇到的问题源于 Android 在嵌套滚动元素方面存在一定的困难。
我有一个 ScrollView,它承载一个水平 RecyclerView 和一个 ExpandableListView 就在它下面。 我遇到的问题是 ScrollView 没有滚动。
我通过以下方式修复了它: 1.设置RecyclerView的固定高度。 2. 计算每个组项单击时的 ExpandableListView 高度。 像这样:
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
setListViewHeight(parent, groupPosition);
return false;
}
});
private void setListViewHeight(ExpandableListView listView, int group) {
ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
int totalHeight = 0;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),View.MeasureSpec.EXACTLY);
for (int i = 0; i < listAdapter.getGroupCount(); i++) {
View groupItem = listAdapter.getGroupView(i, false, null, listView);
groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += groupItem.getMeasuredHeight();
if (((listView.isGroupExpanded(i)) && (i != group)) || ((!listView.isGroupExpanded(i)) && (i == group)))
{
for (int j = 0; j < listAdapter.getChildrenCount(i); j++)
{
View listItem = listAdapter.getChildView(i, j, false, null,listView);
listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
}
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
int height = totalHeight + (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
if (height < 10)
height = 200;
params.height = height;
listView.setLayoutParams(params);
listView.requestLayout();
}
问题: 因为我仅在单击组项时计算列表视图高度,所以当我打开片段并直到我单击组项时,ScrollView 不起作用。 我发现在 onCreateView 中计算 ExpandableListView 适配器的高度是有问题的,因为此时它仍然是空的。
任何想法都会非常感激。
【问题讨论】:
标签: android listview scrollview