2013-12-19 33 views
4

我有一個啓用快速滾動的列表視圖。第一次,快速滾動條不可見。但是,如果我導航到另一個屏幕並返回到此位置,則會看到它。最新的Android操作系統版本會出現此問題。即,在4.4 - 奇巧ListView - 在4.4 Kitkat中第一次看不到快速滾動條

首先VIST

enter image description here

第二次訪問

enter image description here

上爲什麼發生這樣的任何想法?

+0

我已經看到了這個問題,也在尋找答案。 – KickingLettuce

回答

6

我有同樣的問題。我使用的解決方案:

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

什麼工作對我來說是推遲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); 
} 
0

這是一個已知問題(報道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); 
    }