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
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.
Geçerli Parça bir ViewPager tarafından...
Java: bir koleksiyonundan ilk parça Al...
Neden Objective-C metot adı son bölümü...
Kendisini kaldırmak için bir Parça alm...
Bir ViewPager içinde yerini Parça...