我正在尝试在我的应用程序中使用PagerAdapter来实现ViewPager。我主要在研究this example。
我的PagerAdapter
称为DataPagerAdapter,它使用以下构造函数和instantiateItem
,在其中我从data_list_view.xml
扩展 View :
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 ) {}
}
在我的 Activity 中,我得到了我的适配器:DataPagerAdapter adapter = new DataPagerAdapter( this );
然后,我想在代码中引用我的dataListView:dataListView = (ListView) findViewById(R.id.listViewData);
问题是,由于从未处理dataListView
,因此findViewById
调用将instantiateItem
返回为null。何时调用
instantiateItem
并自动完成(如示例所示),还是我必须以某种方式强制执行? 最佳答案
请注意,您的适配器使用不推荐使用的方法:
public Object instantiateItem(View container, int position)
public void destroyItem(View container, int position, Object object)
API表示改为使用这些:
public Object instantiateItem(ViewGroup container, int position)
public void destroyItem(ViewGroup container, int position, Object object)
关于Android PagerAdapter不调用InstantiateItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10455504/