2012-05-04 13 views
10

Próbuję zaimplementować ViewPager z PagerAdapter w mojej aplikacji. Pracuję głównie nad this example.Android PagerAdapter nie wywoływanie instantiateItem

My PagerAdapter nazywa DataPagerAdapter i wykorzystuje następujące konstruktora i instantiateItem, gdzie nadmuchać widok z 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) {} 
} 

A w mojej działalności dostanę adaptera:

DataPagerAdapter adapter = new DataPagerAdapter(this); 

A potem później chcę odnieść się do moich danychListView w kodzie:

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

Problem polega na tym, że dataListView jest zwracany jako wartość NULL przez wywołanie findViewById, ponieważ instantiateItem nie jest przetwarzany.

Kiedy jest wywoływana instantiateItem i odbywa się automatycznie (co sugeruje przykład) lub czy muszę go jakoś zmusić?

+0

Musisz upewnić się, że wypełnienie wszystkich metod w PagerAdapter , takich jak getCount(), isViewFromObject(), itp. Czy możesz dodać nieco więcej kodu do swojego pytania? – dagalpin

+0

Dodałem pełny kod DataPagerAdapter. Zasadniczo ulepszyłem kod użyty w przykładzie z podanego linku. – mraviator

Odpowiedz

23

Uwaga, że ​​adapter używa metod nieaktualne:

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

API mówi do nich korzystać zamiast:

public Object instantiateItem(ViewGroup container, int position) 
public void destroyItem(ViewGroup container, int position, Object object) 
Powiązane problemy