I've an activity with a viewpager which displays several fragments (dynamically created).
On the Fragments I've observable fields. So far so good. The issue I face right now is that once I do an device rotation when the Activity with the fragments is displayed the observable fields are not in the code but within the fragment the fields are null and therefore won't be binded.
Here is my Fragment
code:
public class MyFragment extends Fragment
{
private FragmentSwipeBinding _binding;
public ObservableField<MyViewModel> observableMyViewModel = new ObservableField<MyViewModel>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_swipe, container, false);
_binding.setViewModel(this);
_binding.executePendingBindings();
notifyViewModelChanged();
// Other code using binding
_binding....
return _binding.getRoot();
}
private void notifyViewModelChanged()
{
MyViewModel viewmodel = observableMyViewModel.get();
if(viewmodel != null)
{
viewmodel.update();
observableMyViewModel.notifyChange();
}
}
}
And in my Activity
I create new fragments like that
MyFragment myFragment = new MyFragment();
MyViewModel viewmodel = _myViewModels.get(i);
myFragment.observableMyViewModel.set(viewmodel);
Any hint what's wrong?
Update
Ok I changed in my Activity
the code like that:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// other code
if(savedInstanceState != null)
{
//Restore the fragment's instance
for(int i = 0; i < _myViewModels.size(); i++)
{
MyFragment myFragment;
if(i < getSupportFragmentManager().getFragments().size())
{
myFragment = (MyFragment) getSupportFragmentManager().getFragment(savedInstanceState, "FragmentName" + i);
}
else
{
myFragment = new MyFragment();
MyViewModel viewmodel = _myViewModels.get(i);
myFragment.observableMyViewModel .set(viewmodel);
}
myPagerAdapter.addFragment(myFragment,_myViewModels.get(i).getDescription());
}
}
else
{
for(int i = 0; i < _myViewModels.size(); i++)
{
MyFragment myFragment = new MyFragment();
MyViewModel viewmodel = _myViewModels.get(i);
myFragment.observableMyViewModel .set(viewmodel);
myPagerAdapter.addFragment(myFragment, viewmodel.getDescription());
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
//Save the fragment's instance
for(int i = 0; i < getSupportFragmentManager().getFragments().size(); i++)
{
getSupportFragmentManager().putFragment(outState, "FragmentName" + i, getSupportFragmentManager().getFragments().get(i));
}
}