2012-05-04 15 views
10

Tôi đang cố triển khai ViewPager với PagerAdapter trong ứng dụng của mình. Tôi chủ yếu làm việc với số this example.Android PagerAdapter không gọi instantiateItem

My PagerAdapter được gọi DataPagerAdapter và sử dụng các nhà xây dựng sau và instantiateItem, nơi tôi thổi phồng một cái nhìn từ data_list_view.xml:

public class DataPagerAdapter extends PagerAdapter 
    implements TitleProvider { 
    private LayoutInflater mInflater; 

    private static String[] titles = new String[] 
    { 
     "Page 1", 
     "Page 2", 
     "Page 3" 
    }; 
    private final Context context; 

    public DataPagerAdapter(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    public String getTitle(int position) 
    { 
     return titles[ position ]; 
    } 

    @Override 
    public int getCount() 
    { 
     return titles.length; 
    } 

    @Override 
    public Object instantiateItem(View pager, int position) 
    { 
     ListView v = (ListView) mInflater.inflate(R.layout.data_list_view, null); 
     ((ViewPager)pager).addView(v, 0); 
     return v; 
    } 

    @Override 
    public void destroyItem(View pager, int position, Object view) 
    { 
     ((ViewPager)pager).removeView((ListView)view); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) 
    { 
     return view.equals(object); 
    } 

    @Override 
    public void finishUpdate(View view) {} 

    @Override 
    public void restoreState(Parcelable p, ClassLoader c) {} 

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

    @Override 
    public void startUpdate(View view) {} 
} 

Và trong hoạt động của tôi, tôi có được adapter của tôi:

DataPagerAdapter adapter = new DataPagerAdapter(this); 

Và sau đó sau đó tôi muốn tham chiếu đến dataListView của tôi trong mã:

dataListView = (ListView) findViewById(R.id.listViewData); 

Sự cố là, dataListView được trả lại bằng không bằng cuộc gọi findViewById vì số instantiateItem không bao giờ được xử lý.

Khi nào là instantiateItem được gọi và được thực hiện tự động (ví dụ như ví dụ này có gợi ý) hay tôi phải ép buộc bằng cách nào đó?

+0

Bạn cần phải chắc chắn rằng bạn đang điền vào tất cả các phương pháp trong PagerAdapter , chẳng hạn như getCount(), isViewFromObject(), v.v. Bạn có thể thêm mã nhiều hơn một chút vào câu hỏi của mình không? – dagalpin

+0

Tôi đã thêm mã đầy đủ của DataPagerAdapter. Về cơ bản tôi đã chỉnh sửa mã được sử dụng trong ví dụ từ liên kết mà tôi đã cung cấp. – mraviator

Trả lời

23

Lưu ý, rằng bộ chuyển đổi của bạn sử dụng phương pháp chấp nhận:

public Object instantiateItem(View container, int position) 
public void destroyItem(View container, int position, Object object) 

API cho biết để sử dụng những thay:

public Object instantiateItem(ViewGroup container, int position) 
public void destroyItem(ViewGroup container, int position, Object object)