Material 使用 GridView 和 ArrayAdapter 快速滚动拇指

Material fastscroll thumb with GridView and ArrayAdapter

我有一个 GridView 布局,它使用 ArrayAdapter 来填充其内容。我想利用快速滚动,因此在布局中添加了以下属性 XML:

android:fastScrollAlwaysVisible="true"        
android:fastScrollStyle="@android:style/Widget.Material.FastScroll"

我现在可以使用快速滚动来导航,但现在想添加一个 material 缩略图预览:

根据我的理解,我必须从我的 ArrayAdapter 中实现 SectionIndexer 接口,如下所示:

class exampleArrayAdapter extends ArrayAdapter<...> implements SectionIndexer

在这一点上,我遇到了一个问题,不知道如何获得缩略图预览,担心我可能做错了什么。将不胜感激关于我如何使它工作或我应该查找什么的指示。

我终于有时间回头看看了,结果发现解决方案很琐碎!这就是我所做的:

@Override
public Object[] getSections() {
    ArrayList<String> labels = new ArrayList<>();
    for (LaunchableActivity activity: mActivityInfos) {
        labels.add(activity.getActivityLabel());
    }

    return labels.toArray();
}

@Override
public int getPositionForSection(int i) {
    return i;
}

@Override
public int getSectionForPosition(int i) {
    // We do not need this
    return 0;
}

我有一个 LaunchableActivity 的列表,并基于它创建了一个要返回的 sections 数组。对于我的需要,我所需要的只是实现 getPositionForSection 而不是 getSectionForPosition。您的用例可能会有所不同。

我实现它的源代码可用 here,特别是关于提交:

  • a2c9ddd1c647919afbf24262ac1a7772a08e468c
  • 08802e17f4c75835c28232353fed68964f5d7746
  • 0d73a788c6b92d7b9c05a2871778da42af02afd8
  • f13a59f02690481801bd07ffc593648b8e71d036