2011-10-26 24 views
5

I parçalarını sağlamak için dahili bir liste kullanan bir özel PagerFragmentAdapter ile ViewPager kullanıyorum. Ayar değişikliklerine dinamik olarak parça eklemek ve çıkarmak istiyorum.ekleme ve kaldırma fragmanları dinamik ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

tekrar setAdapter aramaya çalıştık ancak bir IllegalStateException (Can not perform this action after onSaveInstanceState) elde ederiz.

nasıl amacıyla elde edebilirsiniz?

cevap

2

Sen ServicePagerAdapter her zaman sıfırlamak gerekmez. Bu oluşturmak ve onCreate() yönteminde bir kez ayarlandıktan için yeterli senin Activity (veya onActivityCreated() sizin Fragment yöntemindeki) ve daha sonra sadece ona yeni unsurlar eklemek için adaptörün add() yöntemini çağırabilirsiniz. Ancak adaptöre her ekleme sonrasında notifyDataSetChanged()'u aramayı unutmayın.

+0

Maalesef o kadar kolay değildir. FragmentPagerAdapter Önbellekleri önbelleğe alır, özel bir PagerAdapter yaratmanız veya bazı hileler kullanmanız gerekir. – Matroska

+0

kod örneğinizde 'ServicePagerAdapter' olduğunu belirtin - bu bir kütüphane sınıfı değil, zaten özel adaptör kullandığınızı varsaydım. Yani evet, "PagerAdapter" sınıfının özel uygulamasına ihtiyacınız var. Ana sorunuzla ilgili olarak - cevap verildiğini düşünüyorum. – HitOdessit

+2

Öğeler kaldırılmışsa, PagerAdapter üzerinde notifyDataSetChanged() öğesini çağırmak için yeterli değildir. PagerAdapter öğesinin getItemPosition yöntemini de geçersiz kılmanız gerekir. Öğe hala varsa POSITION_UNCHANGED değerini veya kaldırılmışsa POSITION_NONE öğesini döndürün. –

İlgili konular