Las vistas que no aparecen en viewpager

Estoy tratando de construir un viewpager por primera vez. Estoy poblando un ArrayList de vistas en el método onCreate principal y pasarlo al constructor del PagerAdapter. La actividad se inicia bien y puedo ver el ViewPager (o al menos su fondo) pero ninguna de las vistas aparecen en él, sólo veo el fondo en blanco. He intentado inflar los XML de la disposición que sé están trabajando en otros widgets, así que no puede ser un problema allí. Supongo que tiene algo que ver con la forma en que tengo el método instantiateObject escrito. De todos modos, aquí está mi adaptador:

public class StoryAdapter extends PagerAdapter { private Context ctx; private ViewBuilder viewBuilder; public StoryAdapter(Context ctx, ArrayList<View> views){ this.ctx = ctx; } @Override public int getCount() { return views.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return false; } @Override public Object instantiateItem(View arg0, int arg1) { View v = views.get(arg1); ((ViewPager) arg0).addView(v); return v; } @Override public void destroyItem(View pager, int arg1, Object view) { ((ViewPager) pager).removeView((View) view); } } 

Y aquí está mi onCreate ():

 public class ShowStory extends Activity { public int totalPages; Button backBtn; public String text; public ArrayList<View> views; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_story); backBtn = (Button)findViewById(R.id.backBtn); backBtn.setOnClickListener(new OnClickListener() { public void onClick(View view){ Intent intent = new Intent(); setResult(RESULT_CANCELED, intent); finish(); } }); ViewPager vp = (ViewPager)findViewById(R.id.storyFlipper); views = new ArrayList<View>(); View v0 = getLayoutInflater().inflate(R.layout.galleryview, null); TextView v0t = (TextView)v0.findViewById(R.id.headline); v0t.setText("COVER1"); View v1 = getLayoutInflater().inflate(R.layout.coverpage, null); // TextView v1t = (TextView)findViewById(R.id.coverText); // v1t.setText("COVER2"); View v2 = getLayoutInflater().inflate(R.layout.coverpage, null); // TextView v2t = (TextView)findViewById(R.id.coverText); // v2t.setText("COVER3"); views.add(v0); views.add(v1); views.add(v2); StoryAdapter sa = new StoryAdapter(this, views); vp.setAdapter(sa); 

PS Estoy haciendo esto principalmente para fines educativos, este es, obviamente, un ejemplo muy simple. ¡Cualquier ayuda será apreciada!

—— Edit: He intentado lo que sugirió:

  @Override public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.coverpage; break; case 1: resId = R.layout.coverpage; break; case 2: resId = R.layout.coverpage; break; case 3: resId = R.layout.coverpage; break; } View view = inflater.inflate(resId, null); ((ViewPager) collection).addView(view, 0); return view; } 

Y tienen el mismo resultado – veo el fondo en blanco del viewpager, pero no aparecen las vistas

Lo deduje – era porque no tenía nada en el método isViewFromObject. Sustitución de null por

 return arg0 == (View) arg1; 

resuelve el problema.

Creo que las opiniones deben ser inflados dentro del método instantiateItems. Así es como lo hice:

 @Override public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.first_layout_id; break; case 1: resId = R.layout.layout_id; break; case 2: resId = R.layout.layout_id; break; case 3: resId = R.layout.layout_id; break; } View view = inflater.inflate(resId, null); ((ViewPager) collection).addView(view, 0); return view; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.