Bir ViewPager + FragmentPageAdapter ile ilgili bir sorunum var.ViewPager parçaları yeniden oluşturuluyor, ancak görünür değil
Senaryo: I Fragman bir kesit B1 e Fragman B2 ile ViewPager sahip bir Parça A içinde olan bir etkisine sahiptir. B1 e B2 aynı sınıftır, ancak argüman olarak farklı verilerdir.
Sorun: Her şey iyi oluşturma zamanında çalışır. Fakat uygulama arka planda kaldığında ve işlem android tarafından öldürüldüğünde, son durumu geri yüklemeye çalışarak, uygulamayı tekrar başlatırken, Fragman A ise, B1 e B2 Parçası ön planda görünmez. Biraz garip görünen, Fragman B1 e B2'nin Fragman A ChildFragmentManager'ına ait olması ve onStart() ve onResume() 'ın çağrılması (Log tarafından görülmesi) nedeniyle devam ettirilmesidir. Ayrıca, çağrı cihazı iki sayfa ile devam eder, ancak boş ya da daha iyi hiçbir şey görünmez.
FragmentPagerAdapter'in nasıl çalıştığını iyi anlarsam, kendi parçaları ve bunların nasıl yeniden oluşturulması gerektiği kendi sorumluluğunu üstlenmelidir. Ayrıca, bu noktayı uygulamak için, FragmentPagerAdapter, belirtilen konumdaki bir parça zaten mevcutsa arka plandan geldiğinde getItem (int position) öğesini çağırmaz.
... Öyleyse neden Fragman B1 e B2'yi göremiyorum, fakat sadece Çağrı Cihazı boş mu?
Bu örnek kodum.
Fragmenta
@Override
public void onStart() {
super.onStart();
populateViewPager();
}
private void populateViewPager() {
pager.setAdapter(new MyFragmentPageAdapter(getChildFragmentManager()));
indicator.setViewPager(pager);
indicator.notifyDataSetChanged();
}
FragmentPagerAdapter
public class MyFragmentPageAdapter extends FragmentPagerAdapter {
public MyFragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return FragmentB.newInstance(position);
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
String title = "";
if (position == 0)
title = "Fragment B1";
else if (position == 1)
title = "Fragment B2";
return title;
}
}
Fragman B İşte
public static FragmentB newInstance(int position) {
FragmentB f = new FragmentB();
Bundle b = new Bundle();
b.putInt(POSITION_IN_PAGER_ARGUMENT, position);
f.setArguments(b);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Log.d(TAG, "onCreateView");
View root = inflater.inflate(R.layout.fragment_b_layout, container, false);
empty = (TextView) root.findViewById(R.id.empty);
list = (ListView) root.findViewById(R.id.list);
return root;
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
populateListView(loadData());
}
@Override
public void onStop() {
super.onStop();
}
}
herhangi bir yardım? Lütfen. – Noodles
FragmentPagerAdapter'iniz boş görünüyor è.è –
Bunun için herhangi bir çözüm buldunuz mu? Bir süredir aynı problemle sıkışmış. – Slickelito