2013-05-20 32 views
10

Tôi có một số ViewPager với một số đoạn. Mỗi đoạn có một ListView trong một SlidingDrawer (= vô hình trước khi vuốt) với một ArrayAdapter.ViewPager + Adapter trong Fragment => swash swiping

Bộ điều hợp được đặt trên onCreateView(), điều này làm chậm quá trình vuốt, vì 30 mục danh sách phải tải mỗi khi tôi vuốt, vì các đoạn mới đang được tạo.

Câu hỏi của tôi là liệu có thể đặt bộ điều hợp sau khi vuốt khi nó ViewPager không hoạt động? đây có phải là cách tốt hơn không? Danh sách cần phải được tải khi SlidingDrawer được mở rộng.

Trả lời

3

Câu hỏi của tôi là, có thể đặt Bộ điều hợp sau khi vuốt khi Máy nhắn tin không hoạt động?

OnPageChangeListener mà bạn có thể đặt trên ViewPager để theo dõi cử chỉ vuốt. Sau đó, bạn có thể sử dụng phương thức onPageSelected() (hoặc onPageScrollStateChanged() để theo dõi trạng thái hiện tại) để được thông báo khi một trang mới được chọn và bắt đầu từ phương thức đó tải dữ liệu.

Ngoài ra, hãy đảm bảo rằng ListView chịu trách nhiệm về độ trễ và không phải một số phần khác của mã của bạn.

+0

tôi đã nhận xét cuộc gọi setAdapter và cuộc gọi được mượt mà hơn. onPageSelected là một ý tưởng tốt nhưng tôi chỉ nhận được số vị trí, làm thế nào để có được trường hợp hiện tại của Fragment – metinkale38

+0

@ metinkale38 Nó phụ thuộc vào loại adapter bạn sử dụng, xem hai câu trả lời hàng đầu trong câu hỏi này http://stackoverflow.com/question/7379165/update-data-in-listfragment-as-part-of-viewpager? answerertab = votes # tab-top – Luksprog

+0

cảm ơn bạn OnPageChangeListener là một ý tưởng hay, mượt mà hơn trước, nếu tôi không vuốt 2 trang ngay lập tức sau mỗi khác. Trên liên kết của bạn, tôi tìm thấy liên kết này: http://tamsler.blogspot.nl/2011/11/android-viewpager-and-fragments-part-ii.html và tôi đã sử dụng phương pháp thứ 2 để có được ví dụ Fragment – metinkale38

16

Tôi gặp sự cố tương tự ... Tôi đã sử dụng người nghe. Tuy nhiên, khi bạn vuốt hai trang trở lại để trở lại nó đã bị tụt hậu ... Tôi đã làm một cái gì đó như thế này để cải thiện trải nghiệm ....

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. 
    } 

} 

Nếu bạn mất vài giây để tải danh sách đi kèm bổ sung cho viewpager, ok của nó trong điều khoản của UX thay vì đưa ra một kinh nghiệm swiping xấu ... Vì vậy, ý tưởng là để chờ 400ms trong thread trước khi tải danh sách và đảm bảo rằng bạn thực sự không tải nội dung khi người dùng là cố gắng vuốt nhanh để xem nội dung của người xem ...

Các vấn đề liên quan