【发布时间】:2012-05-04 20:12:01
【问题描述】:
我正在尝试在我的应用程序中使用 PagerAdapter 实现 ViewPager。我主要在this example工作。
我的 PagerAdapter 被称为 DataPagerAdapter 并使用以下构造函数和 instantiateItem,我在其中从 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 ) {}
}
在我的活动中,我得到了我的适配器:
DataPagerAdapter adapter = new DataPagerAdapter( this );
然后我想在代码中引用我的dataListView:
dataListView = (ListView) findViewById(R.id.listViewData);
问题是,findViewById 调用将 dataListView 返回为 null,因为从未处理过 instantiateItem。
instantiateItem 何时被调用,这是自动完成的(正如示例似乎暗示的那样)还是我必须以某种方式强制它?
【问题讨论】:
-
您需要确保填写 PagerAdapter 中的所有方法,例如 getCount()、isViewFromObject() 等。能否在您的问题中添加更多代码?跨度>
-
我添加了DataPagerAdapter的完整代码。我基本上从我提供的链接中调整了示例中使用的代码。