這似乎非常&想這是不是正確的方式做到這一點或 我應該改變這種設計圖案
這對我來說似乎有點太複雜。我寧願將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;
}
...
}
3個主要碎片有什麼不同?他們只是更新不同的對象?你在哪裏顯示最終更新的數據?還是隻是將其存儲並繼續顯示輸入表單?另外,第5項不太清楚。片段A是否有與1-4中描述的場景不同的特殊情況? –
Q將回答Q. 3片段是3個不同的子流。所有都是獨立的,但可以使用從前面的片段保存的SQLIte來獲取數據。只需收集數據併發送到API和SQLite。片段只有很少的輸入字段,SAVE按鈕和1-4只有SWIPE功能才能移動下一個屏幕。 – VVB