2011-11-15 18 views
9

私は少し問題に遭遇しています。私がやっていること:私はそれにいくつかの画像を持っているListViewを持っている。スクロールをスムーズにするために、スクロールするときに画像が表示されないようにしました。今や、bugがAndroidにあるようで、時にはスクロール状態がSCROLL_STATE_FLINGからSCROLL_STATE_IDLEに戻って戻らなくなり、画像が再び表示されなくなります。Android:onScrollStateChanged SCROLL_STATE_IDLEが起動しないことがある

私の最初の考えは、onTouchListenerを設定してACTION_UPを取得することでしたが、それはSCROLL_STATE_FLING状態が明らかにその後に設定されているために役立ちません。だから私は、SCROLL_STATE_FLING状態が設定されているときにタイマーを開始し、状態がまだ飛行モードであり、私のビューを無効にしているとしばらくしてからチェックすることができると考えました。しかし、私はそれが非常に良い解決策だとは思わない。

どのようにすればいいのですか?ここではそのための私のコードだ

私は this返事を見てきましたが、私は< 9 APIレベルのソリューションを必要とする(プラスそれはoverscrollingていないとき、それはまた時々起こる):

mList.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      mListAdapter.setIsScrolling(scrollState != SCROLL_STATE_IDLE); 
      Log.i(this, "scrollStateChanged" + scrollState); 
      if (scrollState == SCROLL_STATE_IDLE) { 
       mList.invalidateViews(); 
      } 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     } 
    }); 

おかげで、 マリア

答えて

17

(ユーザーがリストビューの最後まで飛んできたときに問題が起きているように見えるため)。だからあなたのコードを変更する:

+0

シンプルですが、私はそれを考えなかった - ありがとう! –

+1

ようこそ。私はあなたの指がまだ画面に触れている間、あなたがリストビューの終わりに当たったときにそれを理解しました。これはリストビューの一番上でも起こる可能性があります。私が持っているコードは、常に最初のページも読み込むように変更することができます。 –

+0

はい、それもトップで起こっていましたが、それは簡単な変更です。 –

1

私はこの同じ問題を抱えていたとbug listに回避策を掲載している:

誰もがまだTHIに実行しているためsの問題(私が先週あったように)私の作品 回避策は以下の通りです:OnTouchイベントアクションが MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCELあなたの力であるときアンドロイドSDKIntの== 7 はそのonTouchListener(Abs)ListView

onTouchListenerを設定した場合でonCreate

if(androidSDKInt <= 7){ 
     listViewDateSelector.setOnTouchListener(new FingerTracker(onScrollListener));  } 
、次いで SCROLL_STATE_IDLE

コード例を最初と

その後にプライベートクラスを追加します。私は同じ問題を抱えていたので、私の解決策はscrollview位置が最後のページに到達し、その場合には関係なく、常にイメージをロードしている場合だけを検出することでした

private class FingerTracker implements View.OnTouchListener { 
     private OnScrollListener myOnScrollListener; 

     public FingerTracker(OnScrollListener onScrollListener){ 
      myOnScrollListener = onScrollListener;   } 

     public boolean onTouch(View view, MotionEvent event) { 
      final int action = event.getAction(); 
      boolean mFingerUp = action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL; 
      if (mFingerUp) { 
       myOnScrollListener.onScrollStateChanged((AbsListView) view, OnScrollListener.SCROLL_STATE_FLING); 
       myOnScrollListener.onScrollStateChanged((AbsListView) view, OnScrollListener.SCROLL_STATE_IDLE); 
      } 
      return false;   }  } 
+1

しかし、それはまだ遊んでいるかもしれないが、アイドル状態が設定される正しい、正しい? –

+0

真。それについて考えなかった。それはまた、遊びながらもアイドルメソッドを呼び出します...これは私の実装では問題はありませんが、引き続き継続し、それが完了すると自動的にアイドル状態をリセットしますが、これは誰にとってもうまくいかないかもしれません。 – Kasium

関連する問題