我有一个带有viewpager的活动,它显示几个片段(动态创建)。
在碎片上,我观察到了一些区域。到现在为止,一直都还不错。我现在面临的问题是,一旦我在显示带有片段的活动时进行设备旋转,可观察的字段就不在代码中,而是在片段中,这些字段是空的,因此不会被绑定。
这是我的
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);
有什么问题吗?
更新
好的,我换了
活动
这样的代码:
@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));
}
}