我有ListView
,我需要始终启用FastScroll
的可见性。问题是,当列表项只有少数(只有2或3个)并且很容易在屏幕上显示时,很明显它们无法滚动。但FastScroll
仍在屏幕上,即可见。当列表项少于可滚动时,如何禁用或隐藏它。
答案 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高度或数据是否会先准备好。如何向适配器添加数据取决于您的适配器。