2012-05-04 32 views
10

私のアプリケーションにPagerAdapterでViewPagerを実装しようとしています。私は主にthis exampleを働いています。Android PagerAdapterがinstantiateItemを呼び出さない

マイPagerAdapterがDataPagerAdapterと呼ばれ、私はdata_list_view.xmlからビューを膨らま次のコンストラクタとinstantiateItemを、使用している:

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

instantiateItemは決して処理されないので、dataListViewfindViewByIdコールによってヌルとして返されます。

instantiateItemが呼び出され、これは自動的に行われます(例として示唆しているように)、または何とか強制する必要がありますか?お使いのアダプタは非推奨メソッドを使用していることを

+0

あなたはPagerAdapter中のメソッドをすべて記入されていることを確認する必要があります、getCount()、isViewFromObject()などのように、あなたの質問にもう少しコードを追加できますか? – dagalpin

+0

DataPagerAdapterの完全なコードを追加しました。私は基本的に、この例で使用したコードを、私が提供したリンクから微調整しました。 – mraviator

答えて

23

注:

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) 
関連する問題