2012-01-17 38 views
13

Hy vọng rằng ai đó có thể giúp tôi với một vấn đề nhỏ/nhầm lẫn tôi có với Viewpagers và lưu dữ liệu.Android Viewpager tiết kiệm dữ liệu và xem

VẤN ĐỀ:

Khi di chuyển trên bốn điểm tôi có, quan điểm đầu tiên có hai sợi, hai TextView hiển thị một chuỗi hoặc một mục đã chọn. nếu tôi cuộn đến trang thứ ba và quay lại trang thứ hai, dữ liệu trong chế độ xem đầu tiên sẽ bị mất. cần phải lưu dữ liệu.

Điều này có được thực hiện trong hai thủ tục được nêu dưới đây không? (đoán tốt nhất là nó sẽ là) nếu có, những loại lệnh cần phải được nêu?

Mã sản phẩm:

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) {  
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

INFO EXTRA: các ViewPager đang được sử dụng trong

public Object instantiateItem(View collection, int position) { 
} 

Danh sách đầy đủ các phương pháp như sau:

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void finishUpdate(View arg0) { 
} 

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) { 
} 

@Override 
public void startUpdate(View arg0) { 
} 
+1

arg0 là tên biến tuyệt vời! – Roel

Trả lời

46

Thay vì tiết kiệm các trạng thái của các trang đó bạn có thể sửa đổi ViewPager của bạn để nó đệm tất cả các trang của bạn thay vì phá hủy chúng và tái tạo chúng khi bạn di chuyển.

Vì vậy, ví dụ nếu bạn có 4 trang:

ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page 
pager.setAdapter(new PageAdapter(context)); 

Bây giờ các trang của bạn sẽ được giữ 'sống'

Hãy cẩn thận với kỹ thuật này tuy nhiên vì nó sẽ làm tăng tiêu thụ bộ nhớ. Số được chuyển đến setOffscreenPageLimit() là số trang của mỗi trang của trang hiện tại để giữ lại. Trong trường hợp này, chúng tôi có tổng cộng 4 trang, vì vậy trường hợp xấu nhất là khi chúng tôi ở cạnh xa của tập hợp trang - chúng tôi có trang hiển thị hiện tại và 3 trang còn lại bị tắt ở một bên và do đó được lưu giữ trong trí nhớ. Tuy nhiên, với một tập dữ liệu lớn hơn, nó có khả năng có nghĩa là 7 trang được lưu trong bộ nhớ (trang hiện tại cộng 3 bên).

Nói chung, giải pháp tối ưu hơn sẽ là xử lý đúng cách khi tải và tải lại trạng thái trang và hiển thị lại chúng.

Hy vọng điều này sẽ giúp

+0

Tôi không biết có giới hạn tắt màn hình, sẽ xem xét điều đó và cho bạn biết. Cảm ơn lời khuyên của bạn :) – Hadden11

+0

không biết nếu một cái gì đó của nó tôi đang làm sai, nhưng khi nhập rằng giới hạn màn hình tắt nó đi kèm với -> Phương pháp setOffscreenPageLimit (int) là không xác định cho loại doesnt dường như thích được liên kết với một người xem là – Hadden11

+0

nhập khẩu trông như thế nào cho người xem của bạn? nên nhập android.support.v4.view.ViewPager; –

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