首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让FastScroll与ExpandableListView协同工作?

如何让FastScroll与ExpandableListView协同工作?
EN

Stack Overflow用户
提问于 2014-11-04 22:31:46
回答 1查看 855关注 0票数 0

我正在尝试在ExpandableListView中启用快速滚动,并尝试了以下链接中的解决方案:android fastScroll only covers part of the list

问题是,每当我扩展足够多的组来触发快速滚动条时,它就会给我NullPointerException错误。我已经尝试了以下代码:

代码语言:javascript
复制
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)

有人能在这方面给我指点一下吗?我非常感谢您的时间和帮助。

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 06:09:49

您正在重写getSections以返回字符串数组"groups",但是该数组似乎没有在任何地方初始化(除非它是在您尚未发布的代码中完成的)。FastScroller中的mSections被初始化为getSections调用的结果,因此当FastScroller试图访问该字段时,您会得到一个NullPointerException;提供NPE的代码行是

代码语言:javascript
复制
final int sectionCount = mSections.length;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26737688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档