仅当列表数据足以滚动时才显示FastScroll

时间:2014-07-02 06:10:56

标签: android android-listview

我有ListView,我需要始终启用FastScroll的可见性。问题是,当列表项只有少数(只有2或3个)并且很容易在屏幕上显示时,很明显它们无法滚动。但FastScroll仍在屏幕上,即可见。当列表项少于可滚动时,如何禁用或隐藏它。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过setFastScrollEnabled(boolean)方法以编程方式启用/禁用快速滚动功能。

因此,只需检查列表中有多少条目,然后启用/禁用快速滚动。

答案 1 :(得分:1)

不要听@Ridcully。默认行为很少是最优的,这不是很难做到的。以下方法确实要求您知道项目高度。这也有你的活动实现OnPreDrawListener。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    listView = (ListView) findViewById(R.id.list);
    itemViewHeight = getResources().getDimensionPixelSize(R.dimen.item_height);

    adapter = new YourAdapterClass();
    listview.setAdapter(adapter);

    ViewTreeObserver vto = list.getViewTreeObserver();
    if (vto != null && list.getMeasuredHeight() == 0) {
        vto.addOnPreDrawListener(this);
    } else if (list.getMeasuredHeight() != 0) {
        listViewHeight = list.getMeasuredHeight();
    }
}

public void setData(Object data) {
    // Set your adapter data how ever you do.
    adapter.setData(data);
    handleFastScrollVisibility();
}

private void handleFastScrollVisibility() {
    if (listViewHeight == 0 || list == null) return;

    int itemCount = adapter.getCount();
    int totalItemHeight = itemCount * itemViewHeight;

    list.setFastScrollAlwaysVisible(totalItemHeight > listViewHeight);
}

@Override
public boolean onPreDraw() {
    ViewTreeObserver vto = list.getViewTreeObserver();
    if (vto != null) vto.removeOnPreDrawListener(this);

    listViewHeight = list.getMeasuredHeight();
    handleFastScrollVisibility();

    return true;
}

基本上你不知道ListView的高度何时准备就绪。这就是为什么你添加一个预绘制的监听器,它会在它准备好时通知你。我不知道你是如何得到你的数据的,但是这种方法假定你不知道你的ListView高度或数据是否会先准备好。如何向适配器添加数据取决于您的适配器。