2013-05-20 26 views
10

私はViewPagerにいくつかの断片があります。各フラグメントはでSlidingDrawer(スワイプする前に見えない)のListViewを持っています。ViewPager +アダプターのフラグメント=>遅いスワイプ

アダプターはonCreateView()に設定されています。新しいフラグメントが作成されているため、スワイプするたびに30個のリスト項目が読み込まれるため、スワイプが遅くなります。

私の質問は、ViewPagerがアイドル状態のときにスワイプした後にアダプタを設定できるかどうかです。それとも良い方法がありますか? SlidingDrawerが展開されているときは、Listが既に読み込まれている必要があります。

答えて

3

私の質問は、ポケットベルがアイドル状態のときに をスワイプした後に設定することができますか?

あなたはスワイプジェスチャーを監視するためにViewPagerに設定できOnPageChangeListenerがあります。新しいページが選択されたときに通知を取得し、そのメソッドからデータのロードを開始するには、onPageSelected()(または現在の状態を監視するにはonPageScrollStateChanged())メソッドを使用できます。

また、ListViewがコードの遅れに責任があり、コードの他の部分ではないことを確認してください。

+0

私はsetAdapter呼び出しをコメントしていて、よりスムーズでした。 onPageSelectedは良いアイデアですが、私はフラグメント番号の現在のインスタンスを取得する位置番号を取得します – metinkale38

+0

@ metinkale38それはあなたが使用するアダプタのタイプに依存し、この質問のトップ2の回答を参照してくださいhttp://stackoverflow.com/question/7379165/update-data-in-listfragment-part-of-viewpager?answertab = votes#tab-top – Luksprog

+0

ありがとう、OnPageChangeListenerはいいアイデアです。お互いの後に。あなたのリンクで私はこのリンクを見つけました:http://tamsler.blogspot.nl/2011/11/android-viewpager-and-fragments-part-ii.htmlそして私は2番目のメソッドを使ってFragmentインスタンスを取得しました – metinkale38

16

私も同様の問題がありました。私はリスナーを使用しました。あなたはそれがラグだっバックアップするために2つのページのバックスワイプしたときのように来て、リストをロードするために、数ミリ秒かかる場合はそれでも、私は経験を改善し、このようなもの....

viewpager.setOnPageChangeListener(new OnPageChangeListener() { 
    int positionCurrent; 
    boolean dontLoadList; 
    @Override 
    public void onPageScrollStateChanged(int state) { 
     if(state == 0){ // the viewpager is idle as swipping ended 
       new Handler().postDelayed(new Runnable() { 
        public void run() { 
         if(!dontLoadList){ 
         //async thread code to execute loading the list... 
         } 
        } 
       },200); 
      } 
     } 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     positionCurrent = position; 
     if(positionOffset == 0 && positionOffsetPixels == 0) // the offset is zero when the swiping ends{ 
      dontLoadList = false; 
     } 
     else 
      dontLoadList = true; // To avoid loading content for list after swiping the pager. 
    } 

} 

をしましたviewpagerに補足します.Upの面では、間違ったスワイプ・エクスペリエンスを与えるのではなくてOKです。そのため、リストをロードする前にスレッドで400ミリ秒待ってから、ユーザーがビューページのコンテンツを見るためにすばやくスワイプしようとしています...

関連する問題