Как заставить FastScroll работать с ExpandableListView?

Я пытаюсь включить быструю прокрутку в ExpandableListView, и я попробовал обходное решение по этой ссылке: android fastScroll покрывает только часть списка

Проблема в том, что он выдает ошибку NullPointerException всякий раз, когда я расширяю достаточно групп, чтобы вызвать полосу быстрой прокрутки. Я пробовал следующий код:

MainActivity:
expandblelist = (ExpandableListView) findViewById(R.id.mexpandablelistview);
Adapter = new Adapter(this, expandblelist, category_array);
expandblelist.setAdapter(Adapter);
expandblelist.setFastScrollEnabled(true);

Adapter:
public class Adapter extends BaseExpandableListAdapter 
                                implements SectionIndexer, AbsListView.OnScrollListener {
    private Context mContext;
    private ExpandableListView mExpandableListView;
    private List<Category> mGroupCollection;
    private int[] groupStatus;
        private boolean manualScroll;
        private String[] groups;

    public Adapter(Context context, ExpandableListView pExpandableListView, List<Category> pGroupCollection) {
        mContext = context;
        mGroupCollection = pGroupCollection;
        mExpandableListView = pExpandableListView;
        groupStatus = new int[mGroupCollection.size()];
        setListEvent(); 
        this.mExpandableListView.setOnScrollListener(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        this.manualScroll = scrollState == SCROLL_STATE_TOUCH_SCROLL;
    }

    @Override
    public void onScroll(AbsListView view, 
                         int firstVisibleItem, 
                         int visibleItemCount, 
                         int totalItemCount) {}

    @Override
    public int getPositionForSection(int section) {
        if (manualScroll) {
            return section;
        } else {            
            return mExpandableListView.getFlatListPosition(ExpandableListView.getPackedPositionForGroup(section));
        }
    }

    // Gets called when scrolling the list manually
    @Override
    public int getSectionForPosition(int position) {
        return ExpandableListView.getPackedPositionGroup(mExpandableListView.getExpandableListPosition(position));
    }

    @Override
    public String[] getSections() {
    return groups;
    }

LogCat:
NullPointerException
FastScroller.getThumbPositionForListPosition(FastScroller.java:680)
FastScroller.onScroll(FastScroller.java:487)
at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1337)

Может кто-нибудь, пожалуйста, наставить меня на это? Я очень ценю ваше время и помощь.

большое спасибо

1 ответ

Вы переопределяете getSections вернуть ваш массив строк "groups", но массив, кажется, нигде не инициализирован (если это не сделано в коде, который вы не опубликовали). mSections в FastScroller инициализируется в результате вызова getSections, поэтому вы получаете NullPointerException, когда FastScroller пытается получить доступ к этому полю; линия, дающая вам NPE,

final int sectionCount = mSections.length;
Другие вопросы по тегам