11

アプリに PagerAdapter を使用して ViewPager を実装しようとしています。私は主にこの例に取り組んでいます。

MyPagerAdapterは 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);

問題は、が処理されないため、呼び出しdataListViewによって null として返されることです。findViewByIdinstantiateItem

いつinstantiateItem呼び出され、これは自動的に行われますか(例が示唆しているように)、または何らかの形で強制する必要がありますか?

4

2 に答える 2

24

アダプタは非推奨のメソッドを使用していることに注意してください。

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)
于 2012-05-10T18:39:51.987 に答える