【发布时间】:2014-01-07 22:34:46
【问题描述】:
我有一个启用快速滚动的列表视图。第一次,快速滚动条不可见。但是如果我导航到另一个屏幕并返回到这个屏幕,那么它就会变得可见。最新的 Android 操作系统版本会出现此问题。即,在 4.4 - Kitkat
第一次访问
第二次访问
知道为什么会这样吗?
【问题讨论】:
-
我也看到这个问题正在寻找答案。
标签: android android-listview scrollbar
我有一个启用快速滚动的列表视图。第一次,快速滚动条不可见。但是如果我导航到另一个屏幕并返回到这个屏幕,那么它就会变得可见。最新的 Android 操作系统版本会出现此问题。即,在 4.4 - Kitkat
第一次访问
第二次访问
知道为什么会这样吗?
【问题讨论】:
标签: android android-listview scrollbar
我也有同样的问题。我使用解决方案:
gridView.setFastScrollEnabled(true);
if (Build.VERSION.SDK_INT >= 19) {
gridView.setOnScrollListener(new OnScrollListener() {
private static final int DELAY = 2000;
private AbsListView view;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState != SCROLL_STATE_IDLE) {
view.setFastScrollAlwaysVisible(true);
handler.removeCallbacks(runnable);
}
else {
this.view = view;
handler.postDelayed(runnable, DELAY);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
view.setFastScrollAlwaysVisible(false);
view = null;
}
};
});
}
【讨论】:
对我有用的是延迟setFastScrollEnabled() 的通话。
if (Build.VERSION.SDK_INT >= 19) {
mListView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
mListView.setFastScrollEnabled(true);
if (Build.VERSION.SDK_INT >= 16) {
mListView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
mListView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
} else {
mListView.setFastScrollEnabled(true);
}
【讨论】:
这里有一个解决方法:
public static void setFastScrolledEnabled(final AdapterView<?> adapterView,final boolean enable)
{
final GridView gridView;
final ListView listView;
if(adapterView instanceof GridView)
{
gridView=(GridView)adapterView;
listView=null;
}
else if(adapterView instanceof ListView)
{
listView=(ListView)adapterView;
gridView=null;
}
else throw new UnsupportedOperationException("setFastScrolledEnabled is only available for gridView/listView");
if(Build.VERSION.SDK_INT==VERSION_CODES.KITKAT)
adapterView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout()
{
if(gridView!=null)
gridView.setFastScrollEnabled(enable);
else if(listView!=null)
listView.setFastScrollEnabled(enable);
adapterView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
else if(gridView!=null)
gridView.setFastScrollEnabled(enable);
else if(listView!=null)
listView.setFastScrollEnabled(enable);
}
【讨论】: