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的正常滚动行为应该足够了。