Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仅当列表数据足以滚动时显示快速滚动_Android_Android Listview - Fatal编程技术网

Android 仅当列表数据足以滚动时显示快速滚动

Android 仅当列表数据足以滚动时显示快速滚动,android,android-listview,Android,Android Listview,我有一个列表视图,我需要始终启用快速滚动的可见性。问题是,当列表项只有几个(比如只有2个或3个)并且很容易安装在屏幕上时,它们显然无法滚动。但是快速滚动仍在屏幕上,即可见。当列表项小于可滚动项时,如何禁用或隐藏它 您可以通过以下方法以编程方式启用/禁用快速滚动功能 因此,只需检查列表中有多少条目,并相应地启用/禁用快速滚动 不要听@Ridcully的。默认行为很少是最优的,这并不难做到。以下方法确实要求您知道您的物品高度。这也让您的活动在PreDrawListener上实现 public voi

我有一个
列表视图
,我需要始终启用
快速滚动
的可见性。问题是,当列表项只有几个(比如只有2个或3个)并且很容易安装在屏幕上时,它们显然无法滚动。但是
快速滚动
仍在屏幕上,即可见。当列表项小于可滚动项时,如何禁用或隐藏它


您可以通过以下方法以编程方式启用/禁用快速滚动功能


因此,只需检查列表中有多少条目,并相应地启用/禁用快速滚动

不要听@Ridcully的。默认行为很少是最优的,这并不难做到。以下方法确实要求您知道您的物品高度。这也让您的活动在PreDrawListener上实现

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的高度何时准备就绪。这就是为什么要添加一个predraw侦听器,它会在准备就绪时通知您。我不知道您是如何获得数据的,但此方法假定您不知道是否首先准备好ListView高度或数据。如何将数据添加到适配器将取决于适配器。

显示启用快速滚动的代码。m在我的listview.xml中启用快速滚动。但是我如何知道,我有足够的项目显示在屏幕上,无法滚动。因为设备的大小会随着设备的不同而变化。只有当您确实有很多项目时,才应启用快速滚动。对于正常数量的项目(比如20或30个左右),listview的正常滚动行为应该足够了。