【问题标题】:Android PagerAdapter not calling instantiateItemAndroid PagerAdapter 没有调用 instantiateItem
【发布时间】: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的完整代码。我基本上从我提供的链接中调整了示例中使用的代码。

标签: android adapter


【解决方案1】:

请注意,您的适配器使用不推荐使用的方法:

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)

【讨论】:

    【解决方案2】:

    在我的情况下,问题是我错误地将 ViewPager 可见性设置为 GONE 并且它没有被调用。只需让 viewPager 可见性在布局中可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      相关资源
      最近更新 更多