Ich hatte ein Problem, das darauf zurückzuführen ist, dass Android bestimmte Probleme mit verschachtelten Bildlaufelementen hat.Berechnung der ExpandableListView-Höhe im anfänglichen Lebenszyklus
Ich habe eine ScrollView, die eine horizontale RecyclerView und eine ExpandableListView direkt darunter unterhält. Das Problem, auf das ich stieß, war, dass die ScrollView nicht scrollte.
Ich reparierte es durch: 1. feste Höhe zum RecyclerView einstellen. 2. Berechnen der ExpandableListView-Höhe mit jedem Gruppenelementklick. So:
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();
}
Problem: da ich die Listenansicht Höhe nur auf Gruppenelement Klick berechnen, wenn ich das Fragment nur öffnen und bis ich auf eine Gruppe Element klicken, wird der Scroll nicht. Ich habe herausgefunden, dass die Berechnung der Höhe des ExpandableListView Adapters in onCreateView problematisch ist, da es zu diesem Zeitpunkt noch leer ist.
Alle Ideen würden sehr geschätzt werden.
allerdings hat es die Leistung beeinträchtigt .. es scheint, dies jedes Mal, wenn ich den Bildschirm berühren aufgerufen wird .. und wenn ich hinzufügen, eine if-Anweisung, so dass es nur die Methode ruft das erste Mal, das Problem kehrt zurück. – BVtp
tatsächlich wird der Listener in einer Endlosschleife aufgerufen. ohne zu berühren sogar – BVtp
Es war diese Art von Problemen zu vermeiden, dass der Hörer entfernt wird. Hilft es, wenn Sie den Hörer ** entfernen, bevor Sie die Ansichten berühren? – bwt