У меня есть активность с виджером, который отображает несколько фрагментов (динамически создаваемых).
На фрагментах у меня наблюдаемые поля. Все идет нормально. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я выполняю ротацию устройства, когда отображается действие с фрагментами, наблюдаемые поля находятся не в коде, а внутри фрагмента, поля равны нулю и, следовательно, не будут связаны.
Вот мой Fragment
код:
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();
}
}
}
И в моем Activity
я создаю такие новые фрагменты
MyFragment myFragment = new MyFragment();
MyViewModel viewmodel = _myViewModels.get(i);
myFragment.observableMyViewModel.set(viewmodel);
Любой намек, что не так?
Обновление
Хорошо, я изменил в своем Activity
код:
@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));
}
}