2012-02-11 50 views
7

Tôi có một Hoạt động sử dụng các tab và các tab chuyển đổi Phân đoạn. Vấn đề là Fragment mất một vài giây để tải khi được tạo ra, do đó việc chuyển đổi các tab có độ trễ khoảng 1 hoặc 2 giây. Để khắc phục điều này, tôi đã cố gắng tìm cách hiển thị hộp thoại Tải đồ họa đơn giản hoặc thậm chí là tiến trình, để tab thay đổi ngay lập tức và hiển thị nội dung cho biết mọi thứ đang tải cho đến khi mọi thứ hoàn tất.Thay đổi các tab là Chậm/Laggy - Sử dụng các đoạn mã

phương pháp onCreateView My của Fragment trông như thế này:

FrameLayout fl; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    fl = (FrameLayout) inflater.inflate(R.layout.text_layout, container, false); 

    doHeavyStuff(); 

    return fl; 
} 

Tôi đã thử đưa doHeavyStuff() trong onStart() nhưng điều đó không giúp gì cả. Và một chủ đề sẽ không giúp đỡ vì doHeavyStuff() liên quan đến việc thao tác các khung nhìn/GUI.

Bất kỳ ý tưởng nào về cách tôi có thể hiển thị thông tin Phân đoạn và hiển thị "Đang tải" trong khi mọi thứ khác đều tải?

Cảm ơn!

Matt.

Trả lời

8

Trong onActivityCreated():

  • Bắt đầu một progress bar (hoặc bất kỳ tiến trình thể hiện giao diện người dùng yếu tố/s).
  • Thực hiện HeavyStuffDoingAsyncTask được giải thích bên dưới.

HeavyStuffDoingAsyncTask nên có:

  • doHeayStuff() 's logic mà không cập nhật ui trong phương pháp doInBackground.
  • gọi publishProgress() từ doInBackground() mọi lúc bạn muốn cập nhật ui.
  • Triển khai logic cập nhật giao diện người dùng trong phương thức onProgressUpdate.
  • Dừng thanh tiến trình theo phương pháp onPostExecute.

Chúc may mắn.

+0

Tôi chỉ thổi phồng xem trong onCreateView() và đó cũng bị lag. Vậy tôi có nên thay đổi mã lạm phát như trên để có hiệu suất tốt hơn không? – Husyn

+0

Bạn có đang làm gì khác ngoài việc tăng lượt xem không? như điền các lượt xem v.v.,? Nếu vậy, bạn nên làm phần populating bên ngoài onCreateView() để tránh hành vi laggy. – 500865

+0

Không, tôi chỉ đang tăng lượt xem. trả lại inflater.inflate (R.layout.setting_list_layout, vùng chứa, sai); là dòng duy nhất trong onCreateView(); – Husyn

0

cố gắng thiết lập

pager.setOffscreenPageLimit(no_of_fragments or pages); 
Các vấn đề liên quan