2012-05-04 6 views
10

Estoy tratando de implementar ViewPager con PagerAdapter en mi aplicación. Estoy trabajando principalmente en this example.Android PagerAdapter no llama al elemento instantiateItem

Mi PagerAdapter se llama DataPagerAdapter y utiliza el siguiente constructor y instantiateItem, donde inflè vista desde 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) {} 
} 

Y en mi actividad me sale mi adaptador:

DataPagerAdapter adapter = new DataPagerAdapter(this); 

Y luego luego quiero referirme a mi dataListView en el código:

dataListView = (ListView) findViewById(R.id.listViewData); 

El problema es que el dataListView se devuelve como nulo por la llamada findViewById ya que el instantiateItem nunca se procesa.

¿Cuándo se llama instantiateItem y se hace automáticamente (como el ejemplo parece sugerir) o tengo que forzarlo de alguna manera?

+0

Usted necesita asegurarse de que está llenando todos los métodos en el PagerAdapter , como getCount(), isViewFromObject(), etc. ¿Podría agregar un poco más de código a su pregunta? – dagalpin

+0

Agregué el código completo del DataPagerAdapter. Básicamente modifiqué el código utilizado en el ejemplo del enlace que proporcioné. – mraviator

Respuesta

23

Tenga en cuenta, que el adaptador utiliza métodos en desuso:

public Object instantiateItem(View container, int position) 
public void destroyItem(View container, int position, Object object) 

La API dice que use estos en su lugar:

public Object instantiateItem(ViewGroup container, int position) 
public void destroyItem(ViewGroup container, int position, Object object) 
Cuestiones relacionadas