SORU
9 Ocak 2012, PAZARTESİ


Bir ViewPager bir Parça almak

ViewPager birlikte FragmentStatePagerAdapter üç farklı parçaları barındırmak için kullanıyorum:

  • [Fragment1]
  • [Fragment2]
  • [Fragment3]

FragmentActivity ViewPager Fragment1 almak istiyorum.

Sorun nedir ve nasıl düzeltebilirim?

CEVAP
7 Mart 2013, PERŞEMBE


Cevabının bir isim çerçevesi tarafından oluşturulan dayanır. Eğer bu şimdiye kadar değişirse, o artık işe yaramaz.

Ne bu çözüm, instantiateItem() destroyItem() geçersiz kılma hakkında Fragment(State)PagerAdapter:

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return ...;
    }

    @Override
    public Fragment getItem(int position) {
        return MyFragment.newInstance(...); 
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }
}

Bu, mevcut Parçaları ile uğraşırken, benim için iş gibi görünüyor. Henüz örneği olmayan parçaları, getRegisteredFragment çağrılırken null döndürecektir. Ama çoğunlukla bu ViewPager Fragment mevcut almak için kullanıyorum: adapater.getRegisteredFragment(viewPager.getCurrentItem()) null dönüş olmayacak.

Bu çözüm, diğer olumsuzlukların farkında değilim. Eğer herhangi varsa, bilmek isterim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • arnejann

    arnejann

    3 Kasım 2007
  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • Matt Harding

    Matt Harding

    23 Mayıs 2006