18

ExpandableListViewユーザーがグループを展開したときに自動的にスクロールして、展開されたグループ ヘッダーが画面の上部に表示されるようにしたいと考えています。を試しましsmoothScrollToPositionたが、これは展開されたグループが画面のどこかに表示されることを保証するだけです。この例のように、展開されたグループが一番上になるように明示的にスクロールしたいと思います。

Before expanding Group 3:                After expanding Group 3:

+=================+                      +=================+
| Group 1         |                      | Group 3         |
+-----------------+                      +-----------------+
| Group 2         |                      |   Grp 3 Child 1 |
+-----------------+                      +-----------------+
| Group 3         |                      |   Grp 3 Child 2 |
+-----------------+                      +-----------------+
| Group 4         |                      | Group 4         |
+=================+                      +=================+
4

8 に答える 8

18
ListView.setSelection(position)

これは選択された項目までスクロールし、グループ項目をクリックするとこれが呼び出されます。

于 2012-10-06T19:25:55.603 に答える
6

次のコードは、私にとってうまくいった解決策です

public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) {
    // TODO Auto-generated method stub
    //mExpandableList.setSelectionFromTop(groupPosition, 0);

Boolean shouldExpand = (!mExpandableList.isGroupExpanded(groupPosition));        
    mExpandableList.collapseGroup(lastClickedPosition);

    if (shouldExpand){
        //generateExpandableList();
        mExpandableList.expandGroup(groupPosition);
        mExpandableList.setSelectionFromTop(groupPosition, 0);
    }                
    lastClickedPosition = groupPosition;
    return true;        
}
于 2013-03-20T12:04:56.983 に答える
2

この属性android:transcriptMode="disabled"を xml から ExpandibleListView タグに追加します。これはうまくいくはずです。

于 2012-10-06T20:18:33.980 に答える
2

これは私のために働いています

expandList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

            if (!parent.isGroupExpanded(groupPosition)) {
                parent.expandGroup(groupPosition);
            } else {
                parent.collapseGroup(groupPosition);
            }
            parent.setSelectedGroup(groupPosition);

            return true;
        }
    });

スクロールの主な作業部分は

parent.setSelectedGroup(groupPosition);
于 2015-09-23T06:25:05.220 に答える
0

以下のコードは私のために働きます.それが役立つことを願っています.onGroupExpand内でOnGroupExpandListenerを実装し、以下のコードを使用します

public void onGroupExpand(final int groupPosition) {
super.onGroupExpand(groupPosition);

expandableListView.post(new Runnable() {

    @Override
    public void run() {
        expandableListView.setSelection(groupPosition);
        if(expandableListView.getChildAt(groupPosition)!=null)
        expandableListView.requestChildRectangleOnScreen(expandableListView.getChildAt(groupPosition),
                new Rect(0, 0, expandableListView.getChildAt(groupPosition).getRight(), expandableListView.getChildAt(groupPosition).getHeight()), false);
    }
});

}

于 2015-03-24T12:19:50.427 に答える
0

私の設定android:transcriptMode="disabled"も私のためにExpandibleListView働きました。パラメータを「通常」に設定すると、どの方法も機能しません ( setSelectedGroupsetSelectionFromTopなど)。

機能するだけsetSmoothScrollですが、効果が気に入らない.

于 2013-03-04T16:20:28.997 に答える