【问题标题】:ListView - Fast scroll bar not visible for first time in 4.4 KitkatListView - 快速滚动条在 4.4 Kitkat 中第一次不可见
【发布时间】:2014-01-07 22:34:46
【问题描述】:

我有一个启用快速滚动的列表视图。第一次,快速滚动条不可见。但是如果我导航到另一个屏幕并返回到这个屏幕,那么它就会变得可见。最新的 Android 操作系统版本会出现此问题。即,在 4.4 - Kitkat

第一次访问

第二次访问

知道为什么会这样吗?

【问题讨论】:

  • 我也看到这个问题正在寻找答案。

标签: android android-listview scrollbar


【解决方案1】:

我也有同样的问题。我使用解决方案:

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;
        }
        };
    });
}

【讨论】:

    【解决方案2】:

    对我有用的是延迟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);
    }
    

    【讨论】:

      【解决方案3】:

      这是一个已知问题(已报告 herehere)。

      这里有一个解决方法:

        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);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 2016-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多