1

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の提案はありますか?

4

1 に答える 1

0

post()または内でスクロール関数を呼び出して、スクロールpostDelayed()がデフォルトよりも遅く表示されることを確認してください。

于 2012-08-28T17:18:06.957 に答える