2013-08-08 29 views
6

Có thể sử dụng ViewPager không có đoạn không? Tất cả các ví dụ tôi có thể tìm thấy tải một số mảnh vỡ cho ViewPager.Sử dụng bộ điều hợp trang không có đoạn mã

Tôi muốn sử dụng nó tương tự như ListView. Tôi muốn tạo một bộ điều hợp tùy chỉnh sẽ thổi phồng bố cục theo vị trí của máy nhắn tin.

nếu có thể bất cứ ai có thể chỉ cho tôi một ví dụ về điều đó?

Trả lời

7

Có điều hoàn toàn có thể. Kể từ khi ViewPager.setAdapter() mất bất kỳ trường hợp nào PageAdapter, bạn chỉ cần tạo lớp con của riêng bạn của PagerAdapter (loại của nó giống như lớp con BaseAdapter hoặc ArrayAdapter mà bạn sử dụng trong một ListView). chỉ cần nhớ, cho PAgerAdapter các tài liệu nói:

Khi bạn thực hiện một PagerAdapter, bạn phải ghi đè lên phương pháp sau đây ở mức tối thiểu:

Hope this helps

11

tôi đã có vấn đề tương tự và nó đã cho tôi một thời gian để tìm nó ra. Đăng bộ điều hợp của tôi ở đây để tham khảo trong tương lai.

/** 
* A page adapter which works with a large data set by reusing views. 
*/ 
public abstract class ListPageAdapter<T> extends PagerAdapter { 

    // Views that can be reused. 
    private final List<View> mDiscardedViews = new ArrayList<View>(); 
    // Views that are already in use. 
    private final SparseArray<View> mBindedViews = new SparseArray<View>(); 

    private final ArrayList<T> mItems; 
    private final LayoutInflater mInflator; 
    private final int mResourceId; 

    public ListPageAdapter(Context context, int viewRes) { 
    mItems = new ArrayList<T>(); 
    mInflator = LayoutInflater.from(context); 
    mResourceId = viewRes; 
    } 

    @Override 
    public int getCount() { 
    return mItems.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View v, Object obj) { 
    return v == mBindedViews.get(mItems.indexOf(obj)); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
    View view = mBindedViews.get(position); 
    if (view != null) { 
     mDiscardedViews.add(view); 
     mBindedViews.remove(position); 
     container.removeView(view); 
    } 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
    View child = mDiscardedViews.isEmpty() ? 
     mInflator.inflate(mResourceId, container, false) : 
      mDiscardedViews.remove(0); 

    T data = mItems.get(position); 
    initView(child, data, position); 

    mBindedViews.append(position, child); 
    container.addView(child, 0); 
    return data; 
    } 

    public void add(T item) { 
    mItems.add(item); 
    } 

    public T remove(int position) { 
    return mItems.remove(position); 
    } 

    public void clear() { 
    mItems.clear(); 
    } 

    /** 
    * Initiate the view here 
    */ 
    public abstract void initView(View v, T item, int position); 
} 

Chế độ xemPager không được cập nhật tự động khi dữ liệu được thay đổi trong bộ điều hợp. Đối với điều đó, tôi đã sử dụng

pager.setAdapter(null); 
pager.setAdapter(myAdapter); 
pager.setCurrentItem(0); 
+2

Cảm ơn mã piec này – John

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