这似乎非常想这样做是正确的方法还是
我应该改变这个设计模式
对我来说,这确实有点过于复杂的设计。我宁愿将ViewPager 的所有 5 个片段保留为一个带有保存 FAB/按钮的表单,以避免将数据从主片段传递到每个子片段。但是,在您描述的情况下,这可能会导致表单很长,或者如果字段依赖于以前的字段,则检查过多。
如果这种设计方法是正确的,那么我应该如何管理数据
路过?
对于每个主要Fragment,我将使用一个实现Parcelable 的对象,用于从主片段上的数据库加载的整个子流,然后一次传递给子片段填充相应的字段.最后一个子片段负责将更新后的对象保存到数据库中,或者只是将其传递回主片段进行保存
更新:
我没有测试过这段代码,但这是我将数据从主片段传递到子片段的一种方法:
MainFragment.java
public class MainFragment extends Fragment
{
private MyObj myObj;
private SubFragment currentFragment;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
final View view = inflater.inflate(R.layout.fragment, parent, false);
final ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
myObj = db.loadObject();
pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
return view;
}
public static class MyPagerAdapter extends FragmentPagerAdapter
{
MyPagerAdapter(FragmentManager manager)
{
super(manager);
}
@Override
public Fragment getItem(int position)
{
if(currentFragment != null) myObj = currentFragment.getMyObj();
switch(position)
{
case 4:
currentFragment = FragmentT.getInstance(myObj);
break;
case 3:
currentFragment = FragmentS.getInstance(myObj);
break;
case 2:
currentFragment = FragmentR.getInstance(myObj);
break;
case 1:
currentFragment = FragmentQ.getInstance(myObj);
break;
case 0:
default:
currentFragment = FragmentP.getInstance(myObj);
}
return currentFragmnet;
}
@Override
public int getCount()
{
return 5;
}
@Override
public CharSequence getPageTitle(int position)
{
return titles[position];
}
}
}
SubFragment.java
public class SubFragment extends Fragment
{
protected static final String ARGS = "args";
protected MyObj myObj;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Bundle args = getArguments();
if (args != null)
{
myObj = args.getParcelable(ARGS);
}
}
public MyObj getMyObj()
{
return myObj;
}
}
FragmentP.java
public class FragmentP extends SubFragment
{
public static FragmentP getInstance(MyObj myObj)
{
final FragmentP fragment = new FragmentP();
final Bundle args = new Bundle();
args.putParcelable(ARGS, myObj);
fragment.setArguments(args);
return fragment;
}
...
}