Есть приложение, в нем ViewPager и два фрагмента. Реализуется это так:
public class MainActivity extends FragmentActivity {
Vector<Fragment> fragments;
ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewPager = (ViewPager) findViewById(R.id.pager);
fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
viewPager.setOffscreenPageLimit(fragments.size());
PagerAdapter pagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(0);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==1) {
((Fragment1)fragments.get(0)).load();
}
}
class PagerAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
private List<Fragment> fragments;
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
}
В классе Fragment1 у меня есть переменные, которые объявлены как свойства класса и инициализируются внутри метода onCreateView():
public class Fragment1 extends Fragment {
ArrayList<ListItemObject> listItems = null;
ArrayAdapter<ListItemObject> mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
listItems = new ArrayList<ListItemObject>();
mAdapter = new MyAdapter(getActivity(), listItems);
listView.setAdapter(mAdapter);
}
void load() {
mAdapter.clear();
...
}
}
Проблема вот в чем. Во фрагментах иногда (не слишком часто) mAdapter бывает равным нулю. То есть получается, что фрагмент пересоздается, но без вызова onCreateView(). Мне же нужно, чтобы он вообще не пересоздавался пока приложение запущено. Кроме того, внутри фрагмента используется getActivity(), который иногда возвращает null. Возможно, эти две проблемы связаны. Возможно ли это как-то исправить?