Как отключить свойство прокрутки расширяемого списка в Android? - PullRequest
2 голосов
/ 02 марта 2011

Можно ли отключить свойство прокрутки расширяемого представления списка в Android через XML или код ??

Ответы [ 2 ]

0 голосов
/ 23 декабря 2014

Вы не можете отключить автопрокрутку расширяемого списка, однако вы можете использовать некоторые приемы для достижения этой цели.
Вы можете использовать метод requestDisallowInterceptTouchEvent, чтобы отключить прокрутку расширяемого списка. этого будет недостаточно. Если вы не хотите автоматически прокручивать exp при расширении, вы должны рассчитать высоту дочерних элементов, затем установить новые макеты параметров для exp и обновить представление прокрутки.

boolean dispatchMode=false;
expandableListView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    int action = event.getAction();
                    v.getParent().requestDisallowInterceptTouchEvent(dispatchMode);
                    switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        // Disallow ScrollView to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(dispatchMode);

                        break;

                    case MotionEvent.ACTION_UP:
                        // Allow ScrollView to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(dispatchMode);

                        break;
                    }

                    // Handle ListView touch events.
                    v.onTouchEvent(event);
                    return true;

                }
            });




                @Override
                public void onGroupExpand(int groupPosition) {
                    LinearLayout.LayoutParams param = (LinearLayout.LayoutParams) expandableListView.getLayoutParams();
                    // param.height = (expandableListView.getChildCount() *
                    // expandableListView.getHeight());

                    int childrenCount = leftAttributeAdapter.getChildrenCount(groupPosition);
                    param.height += leftAttributeAdapter.getChildrenCount(groupPosition) * expandableListView.getChildAt(0).getHeight();
                    if (childrenCount > 2 && childrenCount < 10) {
                        param.height += 50 * 2;
                    } else if (childrenCount > 10)
                        param.height += 50 * childrenCount;

                    toast("Expandingggg  Children count:" + leftAttributeAdapter.getChildrenCount(groupPosition)  + " and Parameter heigh:" + param.height);

                    expandableListView.setLayoutParams(param);
                    expandableListView.refreshDrawableState();
                    scrollView1.refreshDrawableState();

                }
            });

            expandableListView.setOnChildClickListener(new OnChildClickListener() {

                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                    Toast.makeText(getActivity(), " Child Clicked***" + this.toString(), Toast.LENGTH_SHORT).show();
                    return false;
                }
            });

            expandableListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

                @Override
                public void onGroupCollapse(int groupPosition) {
                    Toast.makeText(getActivity(), " Collapsed***" + this.toString(), Toast.LENGTH_SHORT).show();
                    LinearLayout.LayoutParams param = (LinearLayout.LayoutParams) expandableListView.getLayoutParams();
                    int childrenCount = leftAttributeAdapter.getChildrenCount(groupPosition);
                    param.height -= leftAttributeAdapter.getChildrenCount(groupPosition) * expandableListView.getChildAt(0).getHeight();
                    if (childrenCount > 2 && childrenCount < 10) {
                        param.height -= 30;
                    } else if (childrenCount > 10)
                        param.height -= 120;
                    expandableListView.setLayoutParams(param);
                    expandableListView.refreshDrawableState();
                    scrollView1.refreshDrawableState();

                }
            });
0 голосов
/ 02 марта 2011

Я думаю, что это невозможно, потому что представление автоматически устанавливается в список с вертикальной прокруткой, как ListView, так как ExpandableListView наследует ListView.

...