ExpandableListViewで、一度に1つのグループのみを展開できるようにしたいと思います。ListViewAdapterのonGroupExpandedtoメソッドをオーバーライドして、以前に展開されたグループを折りたたむことで、これを行う解決策を見つけました。
@Override
public void onGroupExpanded(int groupPosition)
{
//collapse the old expanded group, if not the same
//as new group to expand
if(groupPosition != mLastExpandedGroup && mLastExpandedGroup != -1)
{
epView.collapseGroup(mLastExpandedGroup);
}
mLastExpandedGroup = groupPosition;
super.onGroupExpanded(groupPosition);
}
デフォルトでは、新しいグループが展開されると、新しいグループのGroupViewが表示されたままになるようにListViewがスクロールされます。このスクロールは、カスタマイズしたListViewでは正しく機能しません(多くの場合、新しく展開されたグループのGroupViewは画面外に表示されます)。
Androidのソースに基づくと、これが機能しない理由は、拡張後のスクロール位置がonGroupExpandedメソッドが呼び出される前に決定されるため、グループを強制的に折りたたんだ後の位置が不正確になるためです。
では、一度に1つのグループのみを展開でき、グループが展開されたときにGroupViewが表示されるように適切にスクロールするカスタムListViewの提案はありますか?